Real Time Mode

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.

  1. Sia expressions un elenco di espressioni di suffisso/prefisso generate dall'URL u.
  2. Sia expressionHashes un elenco in cui gli elementi sono hash SHA256 di ogni espressione in expressions.
  3. Per ogni hash di expressionHashes:
    1. Se hash può essere trovato nella cache globale, restituisci UNSURE.
  4. Sia expressionHashPrefixes un elenco in cui gli elementi sono i primi 4 byte di ogni hash in expressionHashes.
  5. Per ogni expressionHashPrefix di expressionHashPrefixes:
    1. Cerca expressionHashPrefix nella cache locale.
    2. Se viene trovata la voce memorizzata nella cache:
      1. Determina se l'ora corrente è successiva all'ora di scadenza.
      2. Se è superiore:
        1. Rimuovi la voce memorizzata nella cache trovata dalla cache locale.
        2. Continua con il loop.
      3. Se non è maggiore:
        1. Rimuovere questo particolare expressionHashPrefix da expressionHashPrefixes.
        2. Controlla se l'hash completo corrispondente all'interno di expressionHashes si trova nella voce memorizzata nella cache.
        3. Se trovato, restituisci UNSAFE.
        4. Se non viene trovato, continua con il ciclo.
    3. Se la voce memorizzata nella cache non viene trovata, continua con il ciclo.
  6. Invia expressionHashPrefixes al 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), restituisci UNSURE. In caso contrario, la risposta è response ricevuta 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 cache expiration.
  7. Per ogni fullHash di response:
    1. Inserisci fullHash nella cache locale, insieme a expiration.
  8. Per ogni fullHash di response:
    1. Sia isFound il risultato della ricerca di fullHash in expressionHashes.
    2. Se isFound è False, continua con il ciclo.
    3. Se isFound è True, restituisce UNSAFE.
  9. 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.