Memorizzazione nella cache

Questo documento si applica ai seguenti metodi:

Informazioni sulla memorizzazione nella cache

Per ridurre l'utilizzo della larghezza di banda dei client e proteggere Google dai picchi di traffico, i client sia dell'API Lookup che dell'API Update devono creare e gestire una cache locale dei dati sulle minacce. L'API Lookup utilizza la cache per ridurre il numero di richieste uris.search che i client inviano a Google. Per l'API Update, la cache viene utilizzata per ridurre il numero di richieste hashes.search che i client inviano a Google. Di seguito è descritto il protocollo di memorizzazione nella cache per ogni API.

API Lookup

I client dell'API Lookup devono memorizzare nella cache ogni elemento ThreatUrl restituito fino al tempo definito nel campo expireTime. I client devono quindi consultare la cache prima di inviare una successiva richiesta uris.search al server. Se la voce della cache per un elemento ThreatUrl restituito in precedenza non è ancora scaduta, il client deve presumere che l'elemento non sia ancora sicuro. La memorizzazione nella cache di ThreatUrl elementi può ridurre il numero di richieste API effettuate dal client.

API Update

Per ridurre il numero complessivo di richieste hashes.search inviate a Google utilizzando l'API Update, i client devono mantenere una cache locale. L'API stabilisce due tipi di memorizzazione nella cache, positiva e negativa.

Memorizzazione nella cache positiva

Per impedire ai client di chiedere ripetutamente informazioni sullo stato di un particolare hash completo non sicuro, ogni ThreatHash restituito contiene un tempo di cache positivo (definito dal campo expireTime). Finora, l'hash completo può essere considerato non sicuro.

Memorizzazione nella cache negativa

Per impedire ai client di chiedere ripetutamente informazioni sullo stato di un particolare hash completo sicuro, la risposta definisce una durata della cache negativa per il prefisso richiesto (definito dal campo negativeExpireTime). Fino a questa data, tutti gli hash completi con il prefisso richiesto devono essere considerati sicuri per i tipi di minaccia richiesti, ad eccezione di quelli restituiti dal server come non sicuri. Questa memorizzazione nella cache è particolarmente importante in quanto previene il sovraccarico di traffico che potrebbe essere causato da un conflitto tra prefisso hash con un URL sicuro che riceve molto traffico.

Consultazione della cache

Quando il client vuole controllare lo stato di un URL, calcola prima il suo hash completo. Se nel database locale è presente il prefisso dell'hash completo, il client deve consultare la cache prima di inviare una richiesta hashes.search al server.

Per prima cosa, i clienti dovrebbero controllare se la cache ha avuto un successo positivo. Se esiste una voce positiva della cache non scaduta per l'hash completo di interesse, questa voce dovrebbe essere considerata non sicura. Se la voce positiva della cache è scaduta, il client deve inviare una richiesta hashes.search per il prefisso locale associato. In base al protocollo, se il server restituisce l'hash completo non è sicuro, altrimenti è considerato sicuro.

Se non esistono voci positive della cache per l'hash completo, il client deve verificare se è presente un successo negativo della cache. Se esiste una voce di cache negativa non scaduta per il prefisso locale associato, l'hash completo è considerato sicuro. Se la voce negativa della cache è scaduta o non esiste, il client deve inviare una richiesta hashes.search per il prefisso locale associato e interpretare la risposta come di consueto.

Aggiornamento della cache

La cache del client deve essere aggiornata ogni volta che viene ricevuta una risposta hashes.search. È necessario creare o aggiornare una voce positiva della cache per l'hash completo in base al campo expireTime. Anche la durata negativa della cache del prefisso hash deve essere creata o aggiornata in base al campo negativeExpireTime della risposta.

Se una richiesta hashes.search successiva non restituisce un hash completo attualmente memorizzato nella cache, il client non è tenuto a rimuovere la voce positiva della cache. In pratica, questo non è un motivo di preoccupazione, poiché le durate positive della cache sono in genere brevi (alcuni minuti) per consentire una rapida correzione dei falsi positivi.

Scenario di esempio

Nell'esempio seguente, supponiamo che h(url) sia il prefisso hash dell'URL e che H(url) sia l'hash completo dell'URL. Ciò significa che h(url) = SHA256(url).substr(4), H(url) = SHA256(url).

Supponiamo che un client con una cache vuota visiti example.com/ e veda che h(example.com/) si trova nel database locale. Il client richiede gli hash completi per il prefisso hash h(example.com/) e riceve l'hash completo H(example.com/) insieme a un tempo di scadenza della cache positivo di 5 minuti a partire da ora e un tempo di scadenza della cache negativa di un'ora a partire da ora.

La durata positiva della cache di 5 minuti indica al client per quanto tempo l'hash a lunghezza completa H(example.com/) deve essere considerato non sicuro senza inviare un'altra richiesta hashes.search. Dopo 5 minuti, il client deve inviare un'altra richiesta hashes.search per quel prefisso h(example.com/) se il client visita di nuovo example.com/. Il client deve reimpostare il tempo di scadenza della cache negativa del prefisso hash in base alla nuova risposta.

La durata negativa della cache di un'ora indica al client per quanto tempo tutti gli altri hash completi oltre a H(example.com/) che condividono lo stesso prefisso di h(example.com/) devono essere considerati sicuri. Per la durata di 1 ora, ogni URL ad esempio h(URL) = h(example.com/) deve essere considerato sicuro e, pertanto, non restituisce una richiesta hashes.search (supponendo che H(URL) != H(example.com/)).

Se la risposta fullHashes contiene zero corrispondenze ed è impostata una scadenza della cache negativa, il client non deve inviare richieste hashes.search per nessuno dei prefissi richiesti per il tempo di cache negativo specificato.

Se la risposta hashes.search contiene una o più corrispondenze, viene comunque impostato un tempo di scadenza della cache negativa per l'intera risposta. In questo caso, la data di scadenza della cache di un singolo hash completo indica per quanto tempo il client deve presumere che il particolare hash completo non sia sicuro. Una volta trascorsa la durata della cache di ThreatHash, il client deve aggiornare l'hash completo inviando una richiesta hashes.search per quel prefisso hash se l'URL richiesto corrisponde all'hash completo esistente nella cache. In questo caso, la durata negativa della cache non viene applicata. La durata negativa della cache della risposta si applica solo agli hash completi che non erano presenti nella risposta hashes.search. Per gli hash completi che non sono presenti nella risposta, il client deve astenersi dall'inviare richieste hashes.search fino a quando non sarà trascorsa la durata della cache negativa.