Panoramica
L'API Update consente alle applicazioni client di scaricare versioni con hash degli elenchi di Navigazione sicura per l'archiviazione in un database locale. Gli URL possono quindi essere controllati localmente. Solo se viene trovata una corrispondenza nella il database locale deve inviare una richiesta ai server di Navigazione sicura per verificare se l'URL è incluso negli elenchi di Navigazione sicura.
Prima di utilizzare l'API Update, devi configurare un database locale. Navigazione sicura offre pacchetto Go utilizzabile per iniziare. Per ulteriori dettagli, consulta la sezione Configurazione del database in Database locali.
Aggiornamento del database locale
Per rimanere aggiornati, i clienti devono aggiornare periodicamente gli elenchi di Navigazione sicura nei propri un database locale. Per risparmiare larghezza di banda, i client scaricano i prefissi hash degli URL anziché i non elaborati. Ad esempio, se "www.badurl.com/" è incluso in un elenco di Navigazione sicura, i client scaricano Prefisso hash SHA256 dell'URL anziché dell'URL stesso. Nella maggior parte dei casi, i prefissi di hash hanno una lunghezza di 4 byte, il che significa che il costo medio della larghezza di banda per il download di una singola voce dell'elenco è di 4 byte prima della compressione.
Per aggiornare gli elenchi di Navigazione sicura nel database locale, invia una richiesta HTTP POST
al metodo
threatListUpdates.fetch:
- La richiesta HTTP
POST
include i nomi degli elenchi da aggiornare, nonché vari vincoli del cliente per tenere conto delle limitazioni di memoria e larghezza di banda. - La risposta HTTP
POST
restituisce un aggiornamento completo o parziale. La risposta può anche restituire una durata minima di attesa.
Esempio: threatListUpdates.fetch
Richiesta HTTP POST
Nell'esempio seguente vengono richiesti gli aggiornamenti di un singolo elenco di Navigazione sicura.
Intestazione della richiesta
L'intestazione della richiesta include l'URL della richiesta e il tipo di contenuti. Ricordati di sostituire l'API
chiave per API_KEY
nell'URL.
POST https://safebrowsing.googleapis.com/v4/threatListUpdates:fetch?key=API_KEY HTTP/1.1 Content-Type: application/json
Corpo della richiesta
Il corpo della richiesta include le informazioni sul client (ID e versione) e le informazioni sull'aggiornamento (il nome elenco, stato elenco e vincoli client). Per maggiori dettagli, consulta il corpo della richiesta threatListUpdates.fetch e le spiegazioni che seguono l'esempio di codice.
{ "client": { "clientId": "yourcompanyname", "clientVersion": "1.5.2" }, "listUpdateRequests": [{ "threatType": "MALWARE", "platformType": "WINDOWS", "threatEntryType": "URL", "state": "Gg4IBBADIgYQgBAiAQEoAQ==", "constraints": { "maxUpdateEntries": 2048, "maxDatabaseEntries": 4096, "region": "US", "supportedCompressions": ["RAW"] } }] }
Dati del cliente
I campi clientID
e clientVersion
devono identificare in modo univoco un'implementazione del client, non un singolo utente. Le informazioni del client vengono utilizzate nei log lato server. Puoi scegliere qualsiasi nome per l'ID cliente, ma ti consigliamo di scegliere un nome che rappresenti la vera identità del cliente, ad esempio il nome della tua azienda, presentato come una sola parola, in lettere minuscole.
Elenchi di Navigazione sicura
I campi threatType
, platformType
e threatEntryType
vengono combinati per identificare (nome) gli elenchi di Navigazione sicura. Nell'esempio, viene identificato un elenco:
MALWARE/WINDOWS/URL. Prima di inviare una richiesta, assicurati che le combinazioni di tipo specificate siano valide
(consulta Elenchi di Navigazione sicura).
Stato client
Il campo state
include lo stato attuale del client dell'elenco di Navigazione sicura.
Gli stati del client vengono restituiti nel campo newClientState
della
risposta threatListUpdates.fetch.
Per gli aggiornamenti iniziali, lascia vuoto il campo state
.
Vincoli di dimensioni
Il campo maxUpdateEntries
specifica il numero totale di aggiornamenti che il client può gestire (nel
esempio, 2048). Il campo maxDatabaseEntries
specifica il numero totale di voci che il database locale può gestire (nell'esempio, 4096). I clienti dovrebbero impostare vincoli di dimensione
al fine di proteggere i limiti di memoria e larghezza di banda e di evitare errori
la crescita di Kubernetes. Per ulteriori informazioni,
(vedi Aggiornamento dei vincoli).
Compressioni supportate
Il campo supportedCompressions
elenca i tipi di compressione supportati dal client. Nell'esempio, il client supporta solo dati non elaborati e non compressi. Safe Browsing, tuttavia, supporta tipi di compressione aggiuntivi (vedi Compressione).
Risposta HTTP POST
In questo esempio, la risposta restituisce un aggiornamento parziale per l'elenco di Navigazione sicura utilizzando il parametro tipo di compressione richiesto.
Intestazione della risposta
L'intestazione della risposta include il codice di stato HTTP e il tipo di contenuto. I client che ricevono un codice di stato diverso da HTTP/200 devono attivare la modalità back-off (consulta la sezione Frequenza della richiesta).
HTTP/1.1 200 OK Content-Type: application/json
Corpo della risposta
Il corpo della risposta include le informazioni sull'aggiornamento (nome dell'elenco, tipo di risposta, aggiunte e rimozioni da applicare al database locale, stato del nuovo cliente e un checksum). Nell'esempio, la risposta include anche una durata minima di attesa. Per maggiori dettagli, consulta il corpo della risposta di threatListUpdates.fetch e le spiegazioni che seguono l'esempio di codice.
{ "listUpdateResponses": [{ "threatType": "MALWARE", "threatEntryType": "URL", "platformType": "WINDOWS", "responseType" : "PARTIAL_UPDATE", "additions": [{ "compressionType": "RAW", "rawHashes": { "prefixSize": 4, "rawHashes": "rnGLoQ==" } }], "removals": [{ "compressionType": "RAW", "rawIndices": { "indices": [0, 2, 4] } }], "newClientState": "ChAIBRADGAEiAzAwMSiAEDABEAFGpqhd", "checksum": { "sha256": "YSgoRtsRlgHDqDA3LAhM1gegEpEzs1TjzU33vqsR8iM=" } }], "minimumWaitDuration": "593.440s" }
Aggiornamenti del database
Il campo responseType
indica un aggiornamento parziale o completo. Nell'esempio viene restituito un aggiornamento parziale, pertanto la risposta include sia le aggiunte che le rimozioni. Possono esserci più insiemi di
aggiunte, ma un solo insieme di rimozioni
(consulta Aggiornamenti del database).
Stato del nuovo cliente
Il campo newClientState
conserva il nuovo stato del client per l'elenco di Navigazione sicura aggiornato di recente.
I client devono salvare il nuovo stato per le successive richieste di aggiornamento (il campo state
nella
richiesta di tipothreatListUpdates.fetch
o il campo clientStates
nel
richiesta fullHashes.find).
Checksum
Il checksum consente ai client di verificare che il database locale non sia stato danneggiato. Se
il checksum non corrisponde, il client deve cancellare il database e riemettere un aggiornamento con
campo state
. Tuttavia, i clienti in questa situazione devono comunque seguire gli intervalli di tempo per gli aggiornamenti
(consulta la sezione Frequenza della richiesta).
Durate minime di attesa
Il campo minimumWaitDuration
indica che il client deve attendere 593,44 secondi (9,89 minuti)
prima di inviare un'altra richiesta di aggiornamento. Tieni presente che un periodo di attesa può essere incluso o meno nel
(vedi Frequenza della richiesta).
Controllo degli URL
Per verificare se un URL è presente in un elenco di Navigazione sicura, il client deve prima calcolare l'hash e l'hash del prefisso dell'URL (vedi URL e hashing). Il client esegue quindi una query sul database locale per determinare se esiste una corrispondenza. Se il prefisso hash è non presente nel database locale, l'URL viene considerato sicuro (non sulla Sfogliare gli elenchi).
Se il prefisso hash è presente nel database locale (una collisione del prefisso hash), Il client deve inviare il prefisso hash ai server di Navigazione sicura per la verifica. I server restituiranno tutti gli hash SHA 256 completi che contengono il prefisso hash specificato. Se uno di questi hash completi corrisponde all'hash a lunghezza intera dell'URL in questione, se l'URL è considerato non sicuro. Se nessuno degli hash completi corrisponde all'hash a lunghezza intera dell'URL in questione, questo URL è considerato sicuro.
In nessun momento Google viene a conoscenza degli URL che stai esaminando. Google impara l'hash prefissi degli URL, ma i prefissi hash non forniscono molte informazioni sugli URL effettivi.
Per verificare se un URL è in un elenco di Navigazione sicura, invia una richiesta POST
HTTP al
fullHashes.find
:
- La richiesta HTTP
POST
può includere fino a 500 voci di minaccia. - La richiesta HTTP
POST
include i prefissi hash degli URL da controllare. I clienti sono è incoraggiato a raggruppare più voci di minacce in un'unica richiesta per ridurre l'utilizzo della larghezza di banda. - La risposta HTTP
POST
restituisce gli hash completi corrispondenti insieme alle durate della cache positive e negative. La risposta può anche restituire una durata minima di attesa.
Esempio: fullHashes.find
Richiesta POST HTTP
Nell'esempio seguente, vengono inviati i nomi di due elenchi di Navigazione sicura e tre prefissi hash per il confronto e la verifica.
Intestazione della richiesta
L'intestazione della richiesta include l'URL della richiesta e il tipo di contenuti. Ricorda di sostituire
la tua chiave API con API_KEY
nell'URL.
POST https://safebrowsing.googleapis.com/v4/fullHashes:find?key=API_KEY HTTP/1.1 Content-Type: application/json
Corpo della richiesta
Il corpo della richiesta include le informazioni sul client (ID e versione), gli stati del client e le informazioni sulla minaccia (nomi degli elenchi e prefissi hash). Per le richieste JSON, i prefissi hash devono essere inviati in formato con codifica Base64. Per ulteriori dettagli, consulta Corpo della richiesta fullHashes.find e le spiegazioni che seguono l'esempio di codice.
{ "client": { "clientId": "yourcompanyname", "clientVersion": "1.5.2" }, "clientStates": [ "ChAIARABGAEiAzAwMSiAEDABEAE=", "ChAIAhABGAEiAzAwMSiAEDABEOgH" ], "threatInfo": { "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING"], "platformTypes": ["WINDOWS"], "threatEntryTypes": ["URL"], "threatEntries": [ {"hash": "WwuJdQ=="}, {"hash": "771MOg=="}, {"hash": "5eOrwQ=="} ] } }
Dati del cliente
I campi clientID
e clientVersion
devono identificare in modo univoco un'implementazione del client, non un singolo utente. Le informazioni del client vengono utilizzate nei log lato server. Puoi scegliere un nome qualsiasi per l'ID cliente, ma ti consigliamo di scegliere un nome che rappresenti la vera identità del cliente, ad esempio il nome della tua azienda, scritto in una sola parola, in lettere minuscole.
Tutti gli stati del client
Il campo clientStates
contiene gli stati del client per tutti gli elenchi di Navigazione sicura nel database locale del client. Gli stati del client vengono restituiti nel campo newClientState
della
risposta threatListUpdates.fetch.
Elenchi di Navigazione sicura
threatTypes
, platformTypes
e threatEntryTypes
si combinano per identificare (nome) il
Sfogliare elenchi. Nell'esempio vengono identificati due elenchi: MALWARE/WINDOWS/URL e
SOCIAL_ENGINEERING/WINDOWS/URL. Prima di inviare una richiesta, assicurati che le combinazioni di tipo
siano validi (consulta la sezione Elenchi di Navigazione sicura).
Prefissi hash delle minacce
L'array threatEntries contiene i prefissi hash degli URL che vuoi controllare.
Il campo hash
deve contenere l'esatto prefisso hash presente nel database locale. Ad esempio, se il prefisso dell'hash locale è lungo 4 byte, la voce della minaccia deve essere lunga 4 byte. Se il prefisso dell'hash locale è stato allungato a 7 byte, la voce della minaccia deve essere lunga 7 byte.
Nell'esempio, la richiesta include tre prefissi hash. Tutti e tre i prefissi verranno confrontati con ciascuno degli elenchi di Navigazione sicura per determinare se esiste un hash completo corrispondente.
Nota: l'API Update e il metodo fullHashes.find devono sempre utilizzare il campo hash
,
mai il campo URL
(vedi ThreatEntry).
Risposta HTTP POST
Nell'esempio seguente, la risposta restituisce i dati corrispondenti, organizzati in base all'elenco di Navigazione sicura: oltre alla cache e alle durate di attesa.
Intestazione della risposta
L'intestazione della risposta include il codice di stato HTTP e il tipo di contenuto. I client che ricevono un codice di stato diverso da HTTP/200 devono eseguire il backoff (vedi Frequenza delle richieste).
HTTP/1.1 200 OK Content-Type: application/json
Corpo della risposta
Il corpo della risposta include le informazioni sulla corrispondenza (i nomi degli elenchi e gli hash di lunghezza completa, i metadati, se disponibili, e le durate della cache). Nell'esempio, il corpo della risposta include anche una durata minima di attesa. Per ulteriori dettagli, consulta Corpo della risposta fullHashes.find e le spiegazioni che seguono l'esempio di codice.
{ "matches": [{ "threatType": "MALWARE", "platformType": "WINDOWS", "threatEntryType": "URL", "threat": { "hash": "WwuJdQx48jP-4lxr4y2Sj82AWoxUVcIRDSk1PC9Rf-4=" }, "threatEntryMetadata": { "entries": [{ "key": "bWFsd2FyZV90aHJlYXRfdHlwZQ==", // base64-encoded "malware_threat_type" "value": "TEFORElORw==" // base64-encoded "LANDING" }] }, "cacheDuration": "300.000s" }, { "threatType": "SOCIAL_ENGINEERING", "platformType": "WINDOWS", "threatEntryType": "URL", "threat": { "hash": "771MOrRPMn6xPKlCrXx_CrR-wmCk0LgFFoSgGy7zUiA=" }, "threatEntryMetadata": { "entries": [] }, "cacheDuration": "300.000s" }], "minimumWaitDuration": "300.000s", "negativeCacheDuration": "300.000s" }
Corrisponde a
L'oggetto Corrispondenze restituisce un hash corrispondente a lunghezza intera per due dei prefissi hash. Gli URL corrispondenti a questi hash sono considerati non sicuri. Nessuna corrispondenza trovata per il terzo prefisso hash, in modo che non venga restituito nulla; l'URL corrispondente a questo prefisso hash è considerato sicuro.
Tieni presente che questo esempio abbina un hash completo a un prefisso hash. Tuttavia, potrebbero esserci più hash completi che mappano allo stesso prefisso hash.
Metadati
Il campo threatEntryMetadata
è facoltativo e fornisce informazioni aggiuntive sulla corrispondenza della minaccia. Attualmente i metadati sono disponibili per l'elenco di Navigazione sicura per MALWARE/WINDOWS/URL.
(vedi Metadati).
Durate della cache
I campi cacheDuration
e negativeCacheDuration
indicano il periodo di tempo per il quale gli hash devono essere considerati non sicuri o sicuri (vedi Memorizzazione nella cache).
Durate minime di attesa
Il campo minimumWaitDuration
indica che il client deve attendere 300 secondi (5 minuti) prima
inviando un'altra richiesta fullHashes. Tieni presente che un periodo di attesa potrebbe essere incluso o meno nella risposta
(consulta la sezione Frequenza della richiesta).