Caching

Dieses Dokument bezieht sich auf die folgenden Methoden:

Caching

Um die Bandbreitennutzung der Clients zu reduzieren und Google vor Traffic-Spitzen zu schützen, Die Lookup API und die Update API sind erforderlich, um einen lokalen Cache mit Bedrohungsdaten zu erstellen und zu verwalten. Für die Lookup API wird der Cache verwendet, um die Anzahl der threatMatches zu reduzieren -Anfragen, die Clients an Google senden. Für die Update API wird der Cache verwendet, um die Anzahl der fullHashes-Anfragen zu reduzieren, die Clients an Google senden. Das Caching-Protokoll für jede API ist wie unten beschrieben.

Lookup API

Clients der Lookup API sollten jedes zurückgegebene ThreatMatch-Element für die angegebene Dauer im Cache speichern durch sein Feld „cacheDuration“ angegeben. Clients müssen dann den Cache konsultieren, bevor sie eine weitere threatMatches-Anfrage an den Server. Wenn die Cache-Dauer für einen zuvor zurückgegebenen ThreatMatch-Wert noch nicht abgelaufen ist, sollte der Kunde davon ausgehen, dass der Artikel immer noch nicht sicher ist. ThreatMatch Elemente werden im Cache gespeichert kann die Anzahl der vom Client gestellten API-Anfragen verringern.

Beispiel: ThreatMatches.find

Die vollständigen Beispiele erhalten Sie, wenn Sie in der Kopfzeile der Tabelle auf die Anfrage- und Antwortlinks klicken.

URL-Prüfung
ThreatMatches-Anfrage
URL-Übereinstimmung
Bedrohungsabgleich-Antwort
Caching-Verhalten
"threatEntries": [
 {"url": "http://www.urltocheck.org/"}
]
"matches": [{
 "threat": {"url": "http://www.urltocheck.org/"},
 "cacheDuration": "300.000s"
}]
Übereinstimmung
Der Client muss 5 Minuten warten, bevor er eine neue threatMatches-Anfrage mit folgendem Inhalt sendet: URL http://www.urltocheck.org/.

Update API

Um die Gesamtzahl der fullHashes-Anfragen zu reduzieren, die über die Update API an Google gesendet werden, müssen Clients sind erforderlich, um einen lokalen Cache zu verwalten. Die API richtet zwei Arten des Cachings ein: positive und negative.

Positives Caching

So verhindern Sie, dass Clients wiederholt nach dem Status eines bestimmten unsicheren vollständigen Hashs fragen: Jede zurückgegebene ThreatMatch enthält eine positive Cache-Dauer (definiert durch das Feld cacheDuration). Dieser Wert gibt an, wie lange der vollständige Hashwert als unsicher gilt.

Negatives Caching

Um zu verhindern, dass Clients wiederholt nach dem Status eines bestimmten sicheren vollständigen Hashs fragen, Jede fullHashes-Antwort definiert eine negative Cache-Dauer für das angeforderte Präfix (definiert durch die negativeCacheDuration). Diese Dauer gibt an, wie lange alle vollständigen Hashes mit den angeforderten als sicher für die angeforderten Listen angesehen werden, außer für diejenigen, die vom Server als unsicher. Dieses Caching ist besonders wichtig, da es die Traffic-Überlastung verhindert, durch eine Hash-Präfix-Kollision mit einer sicheren URL, die viel Traffic erhält.

Cache prüfen

Wenn der Client den Status einer URL prüfen möchte, wird zuerst der vollständige Hash berechnet. Wenn der vollständige das Präfix des Hash in der lokalen Datenbank vorhanden ist, sollte der Client den Cache überprüfen, bevor wird eine fullHashes-Anfrage an den Server gestellt.

Zuerst sollten Clients nach einem positiven Cache-Treffer suchen. Wenn ein nicht abgelaufener positiver Cache vorhanden ist vollständigen Hash of Interest eingeben, sollte dieser als unsicher betrachtet werden. Wenn der positive Cache-Eintrag abgelaufen ist, muss der Client eine fullHashes-Anfrage für das zugehörige lokale Präfix senden. Gemäß der -Protokoll, gilt es als unsicher, wenn der Server den vollständigen Hash zurückgibt. Andernfalls gilt sie als zu schützen.

Wenn keine positiven Cache-Einträge für den vollständigen Hash vorhanden sind, sollte der Client nach einer negativen Cache-Treffer. Wenn für das verknüpfte lokale Präfix ein nicht abgelaufener negativer Cache-Eintrag vorhanden ist, wird der der vollständige Hash als sicher gilt. Wenn der Eintrag im negativen Cache abgelaufen ist oder nicht vorhanden ist, hat der Client muss eine fullHashes-Anfrage für das zugehörige lokale Präfix senden und die Antwort als normal interpretieren.

Cache aktualisieren

Der Client-Cache sollte bei jedem Empfang einer fullHashes-Antwort aktualisiert werden. Ein positiver Cache muss für den vollständigen Hash gemäß dem Feld cacheDuration erstellt oder aktualisiert werden. Die Dauer von negativem Cache sollte auch gemäß der negativeCacheDuration der Antwort erstellt oder aktualisiert werden. ein.

Wenn eine nachfolgende fullHashes-Anfrage keinen vollständigen Hash zurückgibt, der derzeit positiv ist muss der Client den positiven Cache-Eintrag nicht entfernen. Dies gibt keinen Anlass zur Sorge da positive Cache-Daueren in der Regel kurz sind (wenige Minuten), Korrektur von falsch positiven Ergebnissen.

Beispielszenario

Im folgenden Beispiel ist h(url) das Hash-Präfix der URL und H(url) der Wert Hash-Wert der URL in voller Länge. Das heißt: h(url) = SHA256(url).substr(4), H(url) = SHA256(url).

Angenommen, ein Client (mit leerem Cache) besucht example.com/ und stellt fest, dass h(example.com/) in der lokalen Datenbank. Der Client fordert die Hashes in voller Länge für das Hash-Präfix h(beispiel.de/) an und empfängt den vollständigen Hash H(beispiel.de/) zusammen mit einer positiven Cache-Dauer von 5 Minuten und eine negative Cache-Dauer von 1 Stunde.

Die positive Cache-Dauer von 5 Minuten teilt dem Client mit, wie lang der H(beispiel.de/) muss als unsicher eingestuft werden, ohne eine weitere fullHashes-Anfrage zu senden. Nach 5 Minuten, muss der Client eine weitere fullHashes-Anfrage für dieses Präfix h(beispiel.de/) ausgeben, wenn die besucht example.com/ erneut. Der Client sollte die negative Cache-Dauer des Hash-Präfixes zurücksetzen gemäß der neuen Antwort.

Die negative Cache-Dauer von 1 Stunde teilt dem Client mit, wie lange alle anderen Hashes in voller Länge mit Ausnahme von H(beispiel.de/) mit dem Präfix h(beispiel.de/) gelten als sicher. Für Dauer von 1 Stunde, jede URL, sodass h(URL) = h(beispiel.de/) als sicher gilt, und führt daher nicht zu einer fullHashes-Anfrage (vorausgesetzt, dass H(URL) != H(beispiel.de/) ist).

Wenn die fullHashes-Antwort keine Übereinstimmungen enthält und eine negative Cache-Dauer festgelegt ist, dann Client darf keine fullHashes-Anfragen für eines der angeforderten Präfixe für die angegebene negative Cache-Dauer hat.

Wenn die fullHashes-Antwort eine oder mehrere Übereinstimmungen enthält, wird trotzdem eine negative Cache-Dauer festgelegt für die gesamte Antwort. In diesem Fall gibt die Cache-Dauer eines einzelnen vollständigen Hashs an, wie lange dass der Hash-Wert in voller Länge vom Client als unsicher angesehen werden muss. Nach dem ThreatMatch-Cache verstrichen ist, muss der Kunde den Hash-Wert in voller Länge aktualisieren, indem er eine fullHashes-Anfrage für dieses Hash-Präfix, wenn die angeforderte URL mit dem vorhandenen Hash-Wert in voller Länge im Cache übereinstimmt. Dabei Fall, dass die negative Cache-Dauer nicht zutrifft. Die negative Cache-Dauer der Antwort gilt nur in Hashes in voller Länge ein, die nicht in der fullHashes-Antwort vorhanden waren. Für Hashes in voller Länge, die nicht in der Antwort enthalten sind, darf der Client keine fullHashes-Anfragen senden. bis die Dauer des negativen Cache verstrichen ist.

Beispiel: fullHashes.find

Die vollständigen Beispiele erhalten Sie, wenn Sie in der Kopfzeile der Tabelle auf die Anfrage- und Antwortlinks klicken.

Hash-Präfixe
fullHashes-Anfrage
Vollständige Hash-Übereinstimmungen
fullHashes-Antwort
Caching-Verhalten
"threatEntries": [
  {"hash": "0xaaaaaaaa"}
]
"matches": [],
"negativeCacheDuration": "3600.000s"
Keine Übereinstimmung.
Der Client darf mindestens eine Stunde lang keine fullHashes-Anfragen für das Hash-Präfix 0xaaaaaaaa senden. Jeder Hash mit dem Präfix 0xaaaaaaaa gilt für eine Stunde als sicher.
"threatEntries": [
  {"hash": "0xbbbbbbbb"}
]
"matches": [
 "threat": {"hash": "0xbbbbbbbb0000..."}
 "cacheDuration": "600.000s",
],
"negativeCacheDuration": "300.000s"
Mögliche Übereinstimmungen.
Der Client sollte die URL mit dem vollständigen Hash 0xbbbbbbbb0000... 10 Minuten lang als unsicher betrachten. Die Client sollte alle anderen URLs mit dem Hash-Präfix 0xbbbbbbbb 5 Minuten lang als sicher betrachten. Nach 5 Minuten, würde der negative Cache-Eintrag für die Hash-Präfixe ablaufen. Da der positive Cache-Eintrag für 0xbbbbbbbb0000... noch nicht abgelaufen ist, sollte der Client fullHashes-Anfragen für alle Hashes senden. außer diesem.
"threatEntries": [
  {"hash": "0xcccccccc"}
]
"matches": [
 "threat": {"hash": "0xccccccccdddd..."},
 "cacheDuration": "600.000s"
],
"negativeCacheDuration": "3600.000s"
Mögliche Übereinstimmungen.
Der Client darf mindestens eine Stunde lang keine fullHashes-Anfrage für das Hash-Präfix 0xcccccccc senden und darf davon ausgehen, dieses Präfixes, um sicherzugehen, es sei denn, der vollständige Hash der URL stimmt mit dem im Cache gespeicherten vollständigen Hashwert überein. 0xccccccccdddd.... In diesem Fall sollte der Client diese URL 10 Minuten lang als unsicher einstufen. Nach 10 Minuten läuft der Hash in voller Länge ab. Alle nachfolgenden Suchvorgänge nach diesem vollständigen Hash sollten lösen eine neue fullHashes-Anfrage aus.