Migration From V4
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
L'une des améliorations majeures de Google Safe Browsing v5 par rapport à la version v4 (plus précisément, l'API Update v4) concerne la fraîcheur et la couverture des données. Étant donné que la protection dépend fortement de la base de données locale gérée par le client, le retard et la taille de la mise à jour de la base de données locale sont les principaux facteurs de la protection manquée. Dans la version 4, le client type met entre 20 et 50 minutes pour obtenir la version la plus récente des listes de menaces. Malheureusement, les attaques par hameçonnage se propagent rapidement : en 2021, 60 % des sites qui lancent des attaques sont actifs pendant moins de 10 minutes. Notre analyse montre qu'environ 25 à 30 % de la protection manquante contre l'hameçonnage est due à la vétusté de ces données. De plus, certains appareils ne sont pas équipés pour gérer l'intégralité des listes de menaces de la navigation sécurisée Google, qui ne cessent de s'allonger au fil du temps.
Si vous utilisez actuellement l'API Update v4, vous pouvez migrer facilement vers la version 5 sans avoir à réinitialiser ni effacer la base de données locale. Cette section explique comment procéder.
Conversion des mises à jour de listes
Contrairement à la version 4, où les listes sont identifiées par le tuple de type de menace, type de plate-forme et type d'entrée de menace, les listes de la version 5 sont simplement identifiées par leur nom. Cela offre de la flexibilité lorsque plusieurs listes v5 peuvent partager le même type de menace. Les types de plates-formes et les types d'entrées de menaces sont supprimés dans la version 5.
Dans la version 4, la méthode threatListUpdates.fetch permet de télécharger des listes. Dans la version 5, vous devez passer à la méthode hashLists.batchGet.
Les modifications suivantes doivent être apportées à la demande :
- Supprimez complètement l'objet
ClientInfo
v4. Au lieu de fournir l'identification d'un client à l'aide d'un champ dédié, utilisez simplement l'en-tête User-Agent bien connu. Bien qu'aucun format spécifique ne soit requis pour fournir l'identification du client dans cet en-tête, nous vous suggérons d'inclure simplement l'ID client et la version du client d'origine, séparés par un espace ou une barre oblique.
- Pour chaque objet
ListUpdateRequest
de la version 4 :
- Recherchez le nom de la liste v5 correspondante dans les listes disponibles et indiquez-le dans la requête v5.
- Supprimez les champs inutiles, tels que
threat_entry_type
ou platform_type
.
- Le champ
state
de la version 4 est directement compatible avec le champ versions
de la version 5. La même chaîne d'octets qui serait envoyée au serveur à l'aide du champ state
dans la version 4 peut simplement être envoyée dans la version 5 à l'aide du champ versions
.
- Pour les contraintes v4, v5 utilise une version simplifiée appelée
SizeConstraints
. Les champs supplémentaires tels que region
doivent être supprimés.
Les modifications suivantes doivent être apportées à la réponse :
- L'énumération
ResponseType
de la version 4 est simplement remplacée par un champ booléen nommé partial_update
.
- Le champ
minimum_wait_duration
peut désormais être nul ou omis. Si c'est le cas, le client est invité à envoyer immédiatement une autre requête. Cela ne se produit que lorsque le client spécifie dans SizeConstraints
une contrainte de taille de mise à jour maximale inférieure à la taille maximale de la base de données.
- L'algorithme de décodage Rice pour les entiers 32 bits devra être ajusté. La différence réside dans le fait que les données encodées sont encodées avec une endianness différente. Dans les versions 4 et 5, les préfixes de hachage 32 bits sont triés de manière lexicographique. Toutefois, dans la version 4, ces préfixes sont traités comme little-endian lors du tri, tandis que dans la version 5, ils sont traités comme big-endian. Cela signifie que le client n'a pas besoin de trier les données, car le tri lexicographique est identique au tri numérique avec big-endian. Vous trouverez un exemple de ce type dans l'implémentation Chromium de la version 4 ici. Ce tri peut être supprimé.
- L'algorithme de décodage Rice devra également être implémenté pour les autres longueurs de hachage.
Convertir les recherches de hachages
Dans la version 4, vous devez utiliser la méthode fullHashes.find pour obtenir les hachages complets. La méthode équivalente dans la version 5 est hashes.search.
Les modifications suivantes doivent être apportées à la demande :
- Structurez le code pour n'envoyer que les préfixes de hachage qui comportent exactement 4 octets.
- Supprimez complètement les objets
ClientInfo
de la version 4. Au lieu de fournir l'identification d'un client à l'aide d'un champ dédié, utilisez simplement l'en-tête User-Agent bien connu. Bien qu'aucun format spécifique ne soit requis pour fournir l'identification du client dans cet en-tête, nous vous suggérons d'inclure simplement l'ID client et la version du client d'origine, séparés par un espace ou une barre oblique.
- Supprimez le champ
client_states
. qui n'était plus nécessaire.
- Il n'est plus nécessaire d'inclure
threat_types
ni les champs similaires.
Les modifications suivantes doivent être apportées à la réponse :
- Le champ
minimum_wait_duration
a été supprimé. Le client peut toujours émettre une nouvelle demande en cas de besoin.
- L'objet
ThreatMatch
de la version 4 a été simplifié pour devenir l'objet FullHash
.
- La mise en cache a été simplifiée en une seule durée de cache. Consultez les procédures ci-dessus pour interagir avec le cache.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/08/10 (UTC).
[null,null,["Dernière mise à jour le 2025/08/10 (UTC)."],[],[],null,["# Migration From V4\n\nOne significant improvement of Google Safe Browsing v5 over v4 (specifically, [the v4 Update API](/safe-browsing/v4/update-api)) is data freshness and coverage. Since the protection highly depends on the client-maintained local database, the delay and size of the local database update is the main contributor of the missed protection. In v4, the typical client takes 20 to 50 minutes to obtain the most up-to-date version of threat lists. Unfortunately, phishing attacks spread fast: as of 2021, 60% of sites that deliver attacks live less than 10 minutes. Our analysis shows that around 25-30% of missing phishing protection is due to such data staleness. Further, some devices are not equipped to manage the entirety of the Google Safe Browsing threat lists, which continues to grow larger over time.\n\nIf you are currently using the [v4 Update API](/safe-browsing/v4/update-api), there is a seamless migration path from v4 to v5 without having to reset or erase the local database. This section documents how to do that.\n\n### Converting List Updates\n\nUnlike V4, where lists are identified by the tuple of threat type, platform type, threat entry type, in v5 lists are simply identified by name. This provides flexibility when multiple v5 lists could share the same threat type. Platform types and threat entry types are removed in v5.\n\nIn v4, one would use the [threatListUpdates.fetch method](/safe-browsing/reference/rest/v4/threatListUpdates/fetch) to download lists. In v5, one would switch to the [hashLists.batchGet method](/safe-browsing/reference/rest/v5/hashLists/batchGet).\n\nThe following changes should be made to the request:\n\n1. Remove the [v4 `ClientInfo` object](/safe-browsing/reference/rest/v4/ClientInfo) altogether. Instead of supplying a client's identification using a dedicated field, simply use the well-known [User-Agent header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent). While there is no prescribed format for supplying the client identification in this header, we suggest simply including the original client ID and client version separated by a space character or a slash character.\n2. For each [v4 `ListUpdateRequest` object](/safe-browsing/reference/rest/v4/threatListUpdates/fetch#listupdaterequest):\n - Look up the corresponding v5 list name from the [available lists](/safe-browsing/reference/Local.Database#available-lists) and supply that name in the v5 request.\n - Remove unneeded fields such as `threat_entry_type` or `platform_type`.\n - The `state` field in v4 is directly compatible with the v5 `versions` field. The same byte string that would be sent to the server using the `state` field in v4 can simply be sent in v5 using the `versions` field.\n - For the v4 constraints, v5 uses a simplified version called [`SizeConstraints`](/safe-browsing/reference/rest/v5/SizeConstraints). Additional fields such as `region` should be dropped.\n\nThe following changes should be made to the response:\n\n1. The v4 [enum `ResponseType`](/safe-browsing/reference/rest/v4/threatListUpdates/fetch#ResponseType) is simply replaced by a boolean field named `partial_update`.\n2. The `minimum_wait_duration` field can now be zero or omitted. If it is, the client is requested to immediately make another request. This only happens when the client specifies in `SizeConstraints` a smaller constraint on max update size than the max database size.\n3. The Rice decoding algorithm for 32-bit integers will need to be adjusted. The difference is that the encoded data are encoded with a different endianness. In both v4 and v5, 32-bit hash prefixes are sorted lexicographically. But in v4, those prefixes are treated as little endian when sorted, whereas in v5 those prefixes are treated as big endian when sorted. This means that the client does not need to do any sorting, since lexicographic sorting is identical to numeric sorting with big endian. An example of this sort in the Chromium implementation of v4 can be found [here](https://source.chromium.org/chromium/chromium/src/+/main:components/safe_browsing/core/browser/db/v4_rice.cc;l=144-146;drc=8ba1bad80dc22235693a0dd41fe55c0fd2dbdabd). Such sorting can be removed.\n4. The Rice decoding algorithm will need to be implemented for other hash lengths as well.\n\n### Converting Hash Searches\n\nIn v4, one would use the [fullHashes.find method](/safe-browsing/reference/rest/v4/fullHashes/find) to get full hashes. The equivalent method in v5 is [the hashes.search method](/safe-browsing/reference/rest/v5/hashes/search).\n\nThe following changes should be made to the request:\n\n1. Structure the code to only send hash prefixes that are exactly 4 bytes in length.\n2. Remove the [v4 `ClientInfo` objects](/safe-browsing/reference/rest/v4/ClientInfo) altogether. Instead of supplying a client's identification using a dedicated field, simply use the well-known [User-Agent header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent). While there is no prescribed format for supplying the client identification in this header, we suggest simply including the original client ID and client version separated by a space character or a slash character.\n3. Remove the `client_states` field. It is no longer necessary.\n4. It is no longer needed to include `threat_types` and similar fields.\n\nThe following changes should be made to the response:\n\n1. The `minimum_wait_duration` field has been removed. The client can always issue a new request on an as-needed basis.\n2. The [v4 `ThreatMatch` object](/safe-browsing/reference/rest/v4/ThreatMatch) has been simplified into the [`FullHash`](/safe-browsing/reference/rest/v5/hashes/search#FullHash) object.\n3. Caching has been simplified into a single cache duration. See the above procedures for interacting with the cache."]]