URLs and Hashing
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Dieser Abschnitt enthält detaillierte Spezifikationen dazu, wie Clients URLs prüfen.
URL-Kanonisierung
Bevor URLs geprüft werden, muss der Client eine Kanonisierung dieser URL durchführen.
Zu Anfang wird davon ausgegangen, dass der Client die URL geparst und gemäß RFC 2396 gültig gemacht hat. Wenn die URL einen internationalisierten Domainnamen (IDN) verwendet, sollte der Client die URL in die ASCII-Point-Code-Darstellung konvertieren. Die URL muss eine Pfadkomponente enthalten. Das heißt, sie muss nach der Domain mindestens einen Schrägstrich (http://google.com/
anstelle von http://google.com
) haben.
Entfernen Sie zuerst die Tabulatorzeichen (0x09), CR (0x0d) und LF (0x0a) aus der URL. Entfernen Sie für diese Zeichen keine Escape-Sequenzen (z.B. %0a
).
Zweitens: Wenn die URL in einem Fragment endet, entfernen Sie das Fragment. Kürzen Sie beispielsweise http://google.com/#frag
auf http://google.com/
.
Drittens: Entfernen Sie Prozent-Escape-Zeichen solange aus der URL, bis keine Prozent-Escape-Zeichen mehr vorhanden sind. Dies kann dazu führen, dass die URL ungültig wird.
So kanonisieren Sie den Hostnamen:
Extrahieren Sie den Hostnamen aus der URL und führen Sie dann folgende Schritte aus:
- Entfernen Sie alle vor- und nachgestellten Punkte.
- Ersetzen Sie aufeinanderfolgende Punkte durch einen einzelnen Punkt.
- Wenn der Hostname als IPv4-Adresse geparst werden kann, normalisieren Sie ihn auf vier durch Kommas getrennte Dezimalwerte. Der Client sollte mit jeder zulässigen IP-Adresskodierung umgehen, einschließlich oktal, hex und weniger als vier Komponenten.
- Wenn der Hostname als IPv6-Adresse in Klammern geparst werden kann, normalisieren Sie ihn, indem Sie unnötige führende Nullen in den Komponenten entfernen und Nullkomponenten mithilfe der Syntax mit doppeltem Doppelpunkt zusammenfassen. Beispiel:
[2001:0db8:0000::1]
sollte in [2001:db8::1]
umgewandelt werden. Wenn der Hostname einen der beiden folgenden speziellen IPv6-Adresstypen hat, wandeln Sie ihn in IPv4 um:
- Eine IPv4-adressierte IPv6-Adresse wie
[::ffff:1.2.3.4]
, die in 1.2.3.4
umgewandelt werden soll;
- Eine NAT64-Adresse mit dem bekannten Präfix 64:ff9b::/96, z. B.
[64:ff9b::1.2.3.4]
, die in 1.2.3.4
umgewandelt werden soll.
- Verwenden Sie Kleinbuchstaben für den gesamten String.
So kanonisieren Sie den Pfad:
- Lösen Sie die Sequenzen
/../
und /./
im Pfad auf, indem Sie /./
durch /
ersetzen und /../
zusammen mit der vorherigen Pfadkomponente entfernen.
- Ersetzen Sie aufeinanderfolgende Schrägstriche durch einen Schrägstrich.
Wenden Sie diese Pfadkanonisierung nicht auf die Suchparameter an.
Setzen Sie in der URL alle Zeichen mit dem Escape-Zeichen in Prozent um, die so aussehen: <= ASCII 32, >= 127, #
oder %
. Die Escape-Zeichen müssen aus Großbuchstaben bestehen.
Host-Suffix-Pfad-Präfix-Ausdrücke
Nachdem die URL kanonisiert wurde, müssen Sie als Nächstes die Suffix-/Präfixausdrücke erstellen. Jeder Suffix-/Präfixausdruck besteht aus einem Hostsuffix (oder vollständigem Host) und einem Pfadpräfix (oder vollständigem Pfad).
Der Client bildet bis zu 30 verschiedene Kombinationen aus Hostsuffix und Pfadpräfix. Diese Kombinationen verwenden nur die Host- und Pfadkomponenten der URL. Schema, Nutzername, Passwort und Port werden verworfen. Wenn die URL Suchparameter enthält, enthält mindestens eine Kombination den vollständigen Pfad und die Suchparameter.
Für den Host versucht der Client höchstens fünf verschiedene Strings. Diese sind:
- Wenn der Hostname kein IPv4- oder IPv6-Literal ist, bis zu vier Hostnamen, die mit der eTLD+1-Domain beginnen und nacheinander führende Komponenten hinzufügen. Die Bestimmung der eTLD+1 sollte auf der öffentlichen Suffixliste basieren.
a.b.example.com
würde beispielsweise zur eTLD+1-Domain example.com
und zum Host mit einer zusätzlichen Hostkomponente b.example.com
führen.
- Der genaue Hostname in der URL. Im vorherigen Beispiel würde
a.b.example.com
überprüft.
Für den Pfad versucht der Client höchstens sechs verschiedene Strings. Sie sind:
- Der genaue Pfad der URL, einschließlich der Suchparameter.
- Der genaue Pfad der URL ohne Abfrageparameter.
- Die vier Pfade, die durch den Start am Stamm (/) und das aufeinanderfolgende Anhängen von Pfadkomponenten entstehen, einschließlich eines abschließenden Schrägstrichs.
Die folgenden Beispiele veranschaulichen das Überprüfungsverhalten:
Für die URL http://a.b.com/1/2.html?param=1
versucht der Client diese möglichen Strings:
a.b.com/1/2.html?param=1
a.b.com/1/2.html
a.b.com/
a.b.com/1/
b.com/1/2.html?param=1
b.com/1/2.html
b.com/
b.com/1/
Für die URL http://a.b.c.d.e.f.com/1.html
versucht der Client diese möglichen Strings:
a.b.c.d.e.f.com/1.html
a.b.c.d.e.f.com/
c.d.e.f.com/1.html
c.d.e.f.com/
d.e.f.com/1.html
d.e.f.com/
e.f.com/1.html
e.f.com/
f.com/1.html
f.com/
Hinweis: Überspringen Sie b.c.d.e.f.com
, da wir nur die letzten fünf Hostnamenkomponenten und den vollständigen Hostnamen verwenden.
Für die URL http://1.2.3.4/1/
versucht der Client diese möglichen Strings:
1.2.3.4/1/
1.2.3.4/
Für die URL http://example.co.uk/1
versucht der Client diese möglichen Strings:
example.co.uk/1
example.co.uk/
Hashing
Google Safe Browsing verwendet ausschließlich SHA256 als Hash-Funktion. Diese Hash-Funktion sollte auf die obigen Ausdrücke angewendet werden.
Der vollständige 32-Byte-Hash wird je nach Umständen auf 4 Byte, 8 Byte oder 16 Byte gekürzt:
Bei Verwendung der Methode „hashes.search“ müssen die Hashes in der Anfrage derzeit auf genau 4 Byte gekürzt werden. Das Senden zusätzlicher Bytes in dieser Anfrage beeinträchtigt den Datenschutz der Nutzer.
Wenn Sie die Listen für die lokale Datenbank mit der Methode „hashList.get“ oder der Methode „hashLists.batchGet“ herunterladen, wird die Länge der vom Server gesendeten Hashes in der Benennungskonvention der Listen codiert, die ein Suffix mit der Hashlänge enthalten. Weitere Informationen finden Sie im Abschnitt Verfügbare Listen.
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-07-25 (UTC).
[null,null,["Zuletzt aktualisiert: 2025-07-25 (UTC)."],[],[],null,["# URLs and Hashing\n\nThis section contains detailed specifications of how clients check URLs.\n\n### Canonicalization of URLs\n\nBefore any URLs are checked, the client is expected to perform some canonicalization on that URL.\n\nTo begin, we assume that the client has parsed the URL and made it valid according to RFC 2396. If the URL uses an internationalized domain name (IDN), the client should convert the URL to the ASCII Punycode representation. The URL must include a path component; that is, it must have at least one slash following the domain (`http://google.com/` instead of `http://google.com`).\n\nFirst, remove tab (0x09), CR (0x0d), and LF (0x0a) characters from the URL. Do not remove escape sequences for these characters (e.g. `%0a`).\n\nSecond, if the URL ends in a fragment, remove the fragment. For example, shorten `http://google.com/#frag` to `http://google.com/`.\n\nThird, repeatedly percent-unescape the URL until it has no more percent-escapes. (This may render the URL invalid.)\n\n**To canonicalize the hostname:**\n\nExtract the hostname from the URL and then:\n\n1. Remove all leading and trailing dots.\n2. Replace consecutive dots with a single dot.\n3. If the hostname can be parsed as an IPv4 address, normalize it to 4 dot-separated decimal values. The client should handle any legal IP-address encoding, including octal, hex, and fewer than four components.\n4. If the hostname can be parsed as a bracketed IPv6 address, normalize it by removing unnecessary leading zeroes in the components and collapsing zero components by using the double-colon syntax. For example `[2001:0db8:0000::1]` should be transformed into `[2001:db8::1]`. If the hostname is one of the two following special IPv6 address types, transform them into IPv4:\n - An IPv4-mapped IPv6 address, such as `[::ffff:1.2.3.4]`, which should be transformed into `1.2.3.4`;\n - A NAT64 address using [the well-known prefix 64:ff9b::/96](https://datatracker.ietf.org/doc/html/rfc6052#section-2.1), such as `[64:ff9b::1.2.3.4]`, which should be transformed into `1.2.3.4`.\n5. Lowercase the whole string.\n\n**To canonicalize the path:**\n\n1. Resolve the sequences `/../` and `/./` in the path by replacing `/./` with `/`, and removing `/../` along with the preceding path component.\n2. Replace runs of consecutive slashes with a single slash character.\n\nDo not apply these path canonicalizations to the query parameters.\n\nIn the URL, percent-escape all characters that are \\\u003c= ASCII 32, \\\u003e= 127, `#`, or `%`. The escapes should use uppercase hex characters.\n\n### Host-Suffix Path-Prefix Expressions\n\nOnce the URL is canonicalized, the next step is to create the suffix/prefix expressions. Each suffix/prefix expression consists of a host suffix (or full host) and a path prefix (or full path).\n\nThe client will form up to 30 different possible host suffix and path prefix combinations. These combinations use only the host and path components of the URL. The scheme, username, password, and port are discarded. If the URL includes query parameters, then at least one combination will include the full path and query parameters.\n\n**For the host**, the client will try at most five different strings. They are:\n\n- If the hostname is not an IPv4 or IPv6 literal, up to four hostnames formed by starting with the eTLD+1 domain and adding successive leading components. The determination of eTLD+1 should be based on the [Public Suffix List](https://publicsuffix.org/). For example, `a.b.example.com` would result in the eTLD+1 domain of `example.com` as well as the host with one additional host component `b.example.com`.\n- The exact hostname in the URL. Following the previous example, `a.b.example.com` would be checked.\n\n**For the path**, the client will try at most six different strings. They are:\n\n- The exact path of the URL, including query parameters.\n- The exact path of the URL, without query parameters.\n- The four paths formed by starting at the root (/) and successively appending path components, including a trailing slash.\n\nThe following examples illustrate the check behavior:\n\nFor the URL `http://a.b.com/1/2.html?param=1`, the client will try these possible strings: \n\n a.b.com/1/2.html?param=1\n a.b.com/1/2.html\n a.b.com/\n a.b.com/1/\n b.com/1/2.html?param=1\n b.com/1/2.html\n b.com/\n b.com/1/\n\nFor the URL `http://a.b.c.d.e.f.com/1.html`, the client will try these possible strings: \n\n a.b.c.d.e.f.com/1.html\n a.b.c.d.e.f.com/\n c.d.e.f.com/1.html\n c.d.e.f.com/\n d.e.f.com/1.html\n d.e.f.com/\n e.f.com/1.html\n e.f.com/\n f.com/1.html\n f.com/\n\n(Note: skip `b.c.d.e.f.com`, since we'll take only the last five hostname components, and the full hostname.)\n\nFor the URL `http://1.2.3.4/1/`, the client will try these possible strings: \n\n 1.2.3.4/1/\n 1.2.3.4/\n\nFor the URL `http://example.co.uk/1`, the client will try these possible strings: \n\n example.co.uk/1\n example.co.uk/\n\n### Hashing\n\nGoogle Safe Browsing exclusively uses SHA256 as the hash function. This hash function should be applied to the above expressions.\n\nThe full 32-byte hash will, depending on the circumstances, be truncated to 4 bytes, 8 bytes, or 16 bytes:\n\n- When using the [hashes.search method](/safe-browsing/reference/rest/v5/hashes/search), we currently require the hashes in the request to be truncated to exactly 4 bytes. Sending additional bytes in this request will compromise user privacy.\n\n- When downloading the lists for the local database using the [hashList.get method](/safe-browsing/reference/rest/v5/hashList/get) or the [hashLists.batchGet method](/safe-browsing/reference/rest/v5/hashLists/batchGet), the length of the hashes sent by the server is encoded within the naming convention of the lists that contain suffix indicating hash length. See [Available Lists](/safe-browsing/reference/Local.Database#available-lists) section for more details."]]