Utilizzo dell'API Update
Panoramica
L'API Update consente alle tue applicazioni client di scaricare versioni con hash degli elenchi di Web Risk per l'archiviazione in un database locale o in memoria. Gli URL possono quindi essere controllati localmente. Quando viene trovata una corrispondenza nel database locale, il client invia una richiesta ai server Web Risk per verificare se l'URL è incluso negli elenchi di Web Risk.
Aggiornamento del database locale
Per rimanere aggiornati, i client devono aggiornare periodicamente gli elenchi di Web Risk nel database locale. Per risparmiare larghezza di banda, i client scaricano i prefissi hash degli URL anziché gli URL non elaborati. Ad esempio, se "www.badurl.com/" è presente in un elenco di Web Risk, i client scaricano il prefisso hash SHA256 di quell'URL anziché l'URL stesso. Nella maggior parte dei casi, i prefissi 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 Web Risk nel database locale, invia una richiesta HTTP
GET al
threatLists.computeDiff
metodo:
- La richiesta HTTP
GETinclude il nome dell'elenco da aggiornare insieme ai vincoli del client per tenere conto delle limitazioni di memoria e larghezza di banda. - La risposta HTTP
GETrestituisce un aggiornamento completo o parziale. La risposta potrebbe restituire anche un tempo di attesa consigliato fino alla successiva operazione di calcolo della differenza.
Esempio: threatLists.computeDiff
Richiesta HTTP GET
Nell'esempio seguente vengono richieste le differenze per l'elenco di Web Risk MALWARE. Per maggiori dettagli, consulta i
threatLists.computeDiff parametri di query
e le spiegazioni che seguono l'esempio di codice.
Metodo HTTP e URL:
GET https://webrisk.googleapis.com/v1/threatLists:computeDiff?threatType=MALWARE&versionToken=Gg4IBBADIgYQgBAiAQEoAQ%3D%3D&constraints.maxDiffEntries=2048&constraints.maxDatabaseEntries=4096&constraints.supportedCompressions=RAW&key=API_KEY
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
curl -X GET \
"https://webrisk.googleapis.com/v1/threatLists:computeDiff?threatType=MALWARE&versionToken=Gg4IBBADIgYQgBAiAQEoAQ%3D%3D&constraints.maxDiffEntries=2048&constraints.maxDatabaseEntries=4096&constraints.supportedCompressions=RAW&key=API_KEY"
PowerShell
Esegui questo comando:
$headers = @{ }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://webrisk.googleapis.com/v1/threatLists:computeDiff?threatType=MALWARE&versionToken=Gg4IBBADIgYQgBAiAQEoAQ%3D%3D&constraints.maxDiffEntries=2048&constraints.maxDatabaseEntries=4096&constraints.supportedCompressions=RAW&key=API_KEY" | Select-Object -Expand ContentDovresti ricevere una risposta JSON simile alla seguente:
{
"recommendedNextDiff": "2020-01-08T19:41:45.436722194Z",
"responseType": "RESET",
"additions": {
"rawHashes": [
{
"prefixSize": 4,
"rawHashes": "AArQMQAMoUgAPn8lAE..."
}
]
},
"newVersionToken": "ChAIARAGGAEiAzAwMSiAEDABEPDyBhoCGAlTcIVL",
"checksum": {
"sha256": "wy6jh0+MAg/V/+VdErFhZIpOW+L8ulrVwhlV61XkROI="
}
}
Java
Python
Elenchi di Web Risk
Il campo threatType identifica l'elenco di Web Risk. Nell'esempio, vengono richieste le differenze per l'elenco di Web Risk MALWARE.
Token versione
Il campo versionToken contiene lo stato attuale del client dell'elenco di Web Risk.
I token versione vengono restituiti nel campo newVersionToken della
risposta threatLists.computeDiff.
Per gli aggiornamenti iniziali, lascia vuoto il campo versionToken.
Vincoli di dimensioni
Il campo maxDiffEntries specifica il numero totale di aggiornamenti che il client può gestire (nell'esempio, 2048). Il campo maxDatabaseEntries specifica il numero totale di voci che il database locale può gestire (nell'esempio, 4096). I client devono impostare vincoli di dimensioni per proteggere le limitazioni di memoria e larghezza di banda e per proteggersi dalla crescita dell'elenco. Per
ulteriori informazioni, consulta Vincoli di aggiornamento).
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.
Web Risk, tuttavia, supporta altri tipi di compressione. Per ulteriori
informazioni, consulta Compressione.
Risposta HTTP GET
In questo esempio, la risposta restituisce un aggiornamento parziale per l'elenco di Web Risk utilizzando il tipo di compressione richiesto.
Corpo della risposta
Il corpo della risposta include le informazioni sulle differenze (il tipo di risposta, le aggiunte e le rimozioni da applicare al database locale, il nuovo token versione e un checksum).
Nell'esempio, la risposta include anche un'ora di differenza successiva consigliata. Per maggiori dettagli, consulta il
threatLists.computeDiff corpo della risposta
e le spiegazioni che seguono l'esempio di codice.
{
"responseType" : "DIFF",
"recommendedNextDiff": "2019-12-31T23:59:59.000000000Z",
"additions": {
"compressionType": "RAW",
"rawHashes": [{
"prefixSize": 4,
"rawHashes": "rnGLoQ=="
}]
},
"removals": {
"rawIndices": {
"indices": [0, 2, 4]
}
},
"newVersionToken": "ChAIBRADGAEiAzAwMSiAEDABEAFGpqhd",
"checksum": {
"sha256": "YSgoRtsRlgHDqDA3LAhM1gegEpEzs1TjzU33vqsR8iM="
},
"recommendedNextDiff": "2019-07-17T15:01:23.045123456Z"
}Differenze del database
Il campo responseType indicherà un aggiornamento parziale (DIFF) o completo (RESET). Nell'esempio, vengono restituite differenze parziali, quindi la risposta include sia aggiunte che rimozioni. Potrebbero esserci più set di aggiunte, ma solo un set di rimozioni. Per ulteriori informazioni, consulta
Differenze del database.
Nuovo token versione
Il campo newVersionToken contiene il nuovo token versione per l'elenco di Web Risk appena aggiornato. I client devono salvare il nuovo stato del client per le successive
richieste di aggiornamento (il versionToken campo nella
threatLists.computeDiff richiesta.
Checksum
Il checksum consente ai client di verificare che il database locale non abbia subito danni. Se il checksum non corrisponde, il client deve cancellare il database e riemettere un aggiornamento con un campo versionToken vuoto. Tuttavia, i client in questa situazione devono comunque rispettare gli intervalli di tempo per gli aggiornamenti. Per ulteriori
informazioni, consulta Frequenza delle richieste.
Differenza successiva consigliata
Il campo recommendedNextDiff indica un timestamp fino a quando il client deve attendere prima di inviare un'altra richiesta di aggiornamento. Tieni presente che il periodo di attesa consigliato potrebbe essere incluso o meno nella risposta. Per maggiori dettagli,
consulta Frequenza delle richieste.
Controllo degli URL
Per verificare se un URL è presente in un elenco di Web Risk, il client deve prima calcolare l'hash e il prefisso hash dell'URL. Per i dettagli, consulta 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 è considerato sicuro (ovvero non presente negli elenchi di Web Risk).
Se il prefisso hash è presente nel database locale (collisione del prefisso hash), il client deve inviare il prefisso hash ai server Web Risk per la verifica. I server restituiranno tutti gli hash SHA 256 a lunghezza intera che contengono il prefisso hash specificato. Se uno di questi hash a lunghezza intera corrisponde all'hash a lunghezza intera dell'URL in questione, l'URL è considerato non sicuro. Se nessuno degli hash a lunghezza intera corrisponde all'hash a lunghezza intera dell'URL in questione, l'URL è considerato sicuro.
In nessun momento Google viene a conoscenza degli URL che stai esaminando. Google viene a conoscenza dei prefissi hash degli URL, ma i prefissi hash non forniscono molte informazioni sugli URL effettivi.
Per verificare se un URL è presente in un elenco di Web Risk, invia una richiesta HTTP GET request
al hashes.search
metodo:
- La richiesta HTTP
GETinclude il prefisso hash dell'URL da controllare. - La risposta HTTP
GETrestituisce gli hash a lunghezza intera corrispondenti insieme ai tempi di scadenza positivi e negativi.
Esempio: hashes.search
Richiesta HTTP GET
Nell'esempio seguente, vengono inviati i nomi di due elenchi di Web Risk e un prefisso hash per il confronto e la verifica. Per maggiori dettagli, consulta i
hashes.search parametri di query
e le spiegazioni che seguono l'esempio di codice.
curl \ -H "Content-Type: application/json" \ "https://webrisk.googleapis.com/v1/hashes:search?key=YOUR_API_KEY&threatTypes=MALWARE&threatTypes=SOCIAL_ENGINEERING&hashPrefix=WwuJdQ%3D%3D"
Java
Python
Elenchi di Web Risk
Il campo threatTypes identifica gli elenchi di Web Risk. Nell'esempio, vengono identificati due elenchi: MALWARE e SOCIAL_ENGINEERING.
Prefissi hash delle minacce
Il campo hashPrefix contiene il prefisso hash dell'URL che vuoi controllare. Questo campo deve contenere il prefisso hash esatto presente nel database locale. Ad esempio, se il prefisso hash locale ha una lunghezza di 4 byte, il campo hashPrefix deve avere una lunghezza di 4 byte. Se il prefisso hash locale è stato allungato a 7 byte, il campo hashPrefix deve avere una lunghezza di 7 byte.
Risposta HTTP GET
Nell'esempio seguente, la risposta restituisce le minacce corrispondenti, contenenti gli elenchi di Web Risk a cui corrispondono, insieme ai tempi di scadenza.
Corpo della risposta
Il corpo della risposta include le informazioni sulla corrispondenza (i nomi degli elenchi, gli hash a lunghezza intera e le durate della cache). Per maggiori dettagli, consulta il
hashes.search corpo della risposta
e le spiegazioni che seguono l'esempio di codice.
{
"threats": [{
"threatTypes": ["MALWARE"],
"hash": "WwuJdQx48jP-4lxr4y2Sj82AWoxUVcIRDSk1PC9Rf-4="
"expireTime": "2019-07-17T15:01:23.045123456Z"
}, {
"threatTypes": ["MALWARE", "SOCIAL_ENGINEERING"],
"hash": "WwuJdQxaCSH453-uytERC456gf45rFExcE23F7-hnfD="
"expireTime": "2019-07-17T15:01:23.045123456Z"
},
}],
"negativeExpireTime": "2019-07-17T15:01:23.045123456Z"
}Corrisponde a
Il campo threats restituisce gli hash a lunghezza intera corrispondenti per il prefisso hash.
Gli URL corrispondenti a questi hash sono considerati non sicuri. Se non viene trovata alcuna corrispondenza per un prefisso hash, non viene restituito nulla; l'URL corrispondente a quel prefisso hash è considerato sicuro.
Ora di scadenza
I campi expireTime e negativeExpireTime indicano fino a quando gli hash devono essere considerati rispettivamente non sicuri o sicuri. Per maggiori dettagli,
consulta Memorizzazione nella cache.