Quando i client scelgono di utilizzare Google Safe Browsing v5 in modalità in tempo reale, mantengono nel proprio database locale: (i) una cache globale di siti probabilmente benigni, formattati come hash SHA256 di espressioni URL di suffisso host/prefisso percorso, (ii) un insieme di elenchi di minacce, formattati come prefissi hash SHA256 di espressioni URL di suffisso host/prefisso percorso. L'idea generale è che ogni volta che il client vuole controllare un determinato URL, viene eseguito un controllo locale utilizzando la cache globale. Se il controllo viene superato, viene eseguito un controllo degli elenchi di minacce locali. In caso contrario, il client continua con il controllo hash in tempo reale, come descritto di seguito.
Oltre al database locale, il client gestirà una cache locale. Una cache locale di questo tipo non deve trovarsi in uno spazio di archiviazione permanente e può essere cancellata in caso di pressione sulla memoria.
Di seguito è disponibile una specifica dettagliata della procedura.
Procedura di verifica degli URL in tempo reale
Questa procedura prende un singolo URL u e restituisce SAFE, UNSAFE o UNSURE. Se restituisce SAFE, l'URL è considerato sicuro da Google Navigazione sicura. Se restituisce UNSAFE, l'URL è considerato potenzialmente non sicuro da Google Safe Browsing e devono essere intraprese azioni appropriate, ad esempio mostrare un avviso all'utente finale, spostare un messaggio ricevuto nella cartella Spam o richiedere una conferma aggiuntiva da parte dell'utente prima di procedere. Se restituisce UNSURE, in seguito deve essere utilizzata la seguente procedura di controllo locale.
- Sia
expressionsun elenco di espressioni di suffisso/prefisso generate dall'URLu. - Sia
expressionHashesun elenco in cui gli elementi sono hash SHA256 di ogni espressione inexpressions. - Per ogni
hashdiexpressionHashes:- Se
hashpuò essere trovato nella cache globale, restituisciUNSURE.
- Se
- Sia
expressionHashPrefixesun elenco in cui gli elementi sono i primi 4 byte di ogni hash inexpressionHashes. - Per ogni
expressionHashPrefixdiexpressionHashPrefixes:- Cerca
expressionHashPrefixnella cache locale. - Se viene trovata la voce memorizzata nella cache:
- Determina se l'ora corrente è successiva all'ora di scadenza.
- Se è superiore:
- Rimuovi la voce memorizzata nella cache trovata dalla cache locale.
- Continua con il loop.
- Se non è maggiore:
- Rimuovere questo particolare
expressionHashPrefixdaexpressionHashPrefixes. - Controlla se l'hash completo corrispondente all'interno di
expressionHashessi trova nella voce memorizzata nella cache. - Se trovato, restituisci
UNSAFE. - Se non viene trovato, continua con il ciclo.
- Rimuovere questo particolare
- Se la voce memorizzata nella cache non viene trovata, continua con il ciclo.
- Cerca
- Invia
expressionHashPrefixesal server Google Safe Browsing v5 utilizzando RPC SearchHashes o il metodo REST hashes.search. Se si è verificato un errore (inclusi errori di rete, errori HTTP e così via), restituisciUNSURE. In caso contrario, la risposta èresponsericevuta dal server Safe Browsing, ovvero un elenco di hash completi insieme ad alcune informazioni ausiliarie che identificano la natura della minaccia (ingegneria sociale, malware e così via), nonché il tempo di scadenza della cacheexpiration. - Per ogni
fullHashdiresponse:- Inserisci
fullHashnella cache locale, insieme aexpiration.
- Inserisci
- Per ogni
fullHashdiresponse:- Sia
isFoundil risultato della ricerca difullHashinexpressionHashes. - Se
isFoundè False, continua con il ciclo. - Se
isFoundè True, restituisceUNSAFE.
- Sia
- Ritorno:
SAFE.
Sebbene questo protocollo specifichi quando il client invia expressionHashPrefixes al server, non specifica intenzionalmente come inviarli. Ad esempio, è accettabile che il client invii tutti i expressionHashPrefixes in un'unica richiesta, così come è accettabile che invii ogni singolo prefisso in expressionHashPrefixes al server in richieste separate (magari procedendo in parallelo). È inoltre accettabile che il client invii prefissi hash non correlati o generati in modo casuale insieme ai prefissi hash in expressionHashPrefixes, a condizione che il numero di prefissi hash inviati in una singola richiesta non superi 30.