Este documento se aplica a los siguientes métodos:
Acerca del almacenamiento en caché
Para reducir el uso del ancho de banda del cliente y proteger a Google de los aumentos repentinos de tráfico, los clientes de
La API de Lookup y la API de Update son necesarias para crear y mantener una caché local de datos de amenazas.
En el caso de la API de Lookup, se usa la caché para reducir la cantidad de threatMatches
.
que los clientes envían a Google. Para la API de Update, la caché se usa para reducir la cantidad de
Solicitudes de fullHashes
que los clientes envían a Google. El protocolo de almacenamiento en caché para cada API
que se describen a continuación.
API de Lookup
Los clientes de la API de Lookup deben almacenar en caché cada elemento ThreatMatch
devuelto durante el tiempo definido
según su campo cacheDuration. Los clientes deben consultar la caché antes de hacer una
threatMatches
al servidor Si la duración de la caché para un ThreatMatch
que se mostró anteriormente
aún no venció, el cliente debe asumir que el elemento sigue siendo inseguro. Almacenando en caché ThreatMatch
elemento
puede reducir la cantidad de solicitudes a la API que realiza el cliente.
Ejemplo: ThreatMatches.find
Haz clic en los vínculos de solicitud y respuesta que se encuentran en el encabezado de la tabla para ver ejemplos completos.
Verificación de URL Solicitud de coincidencia de amenaza |
Coincidencia de URL Respuesta dethreatCoincidencias |
Comportamiento de almacenamiento en caché |
---|---|---|
"threatEntries": [ {"url": "http://www.urltocheck.org/"} ] |
"matches": [{ "threat": {"url": "http://www.urltocheck.org/"}, "cacheDuration": "300.000s" }] |
Buscar coincidencias El cliente debe esperar 5 minutos antes de enviar una nueva solicitud threatMatches que incluya
URL http://www.urltocheck.org/.
|
API de Update
Para reducir la cantidad total de solicitudes fullHashes
enviadas a Google con la API de Update, los clientes
necesarios para mantener una caché local. La API establece dos tipos de almacenamiento en caché: el positivo y el negativo.
Almacenamiento en caché positivo
Para evitar que los clientes pregunten varias veces sobre el estado de un hash completo no seguro específico, haz lo siguiente:
Cada ThreatMatch
que se muestra contiene una duración de caché positiva (definida por el campo cacheDuration
).
que indica cuánto tiempo se considerará que el hash completo no es seguro.
Almacenamiento en caché negativo
Para evitar que los clientes pregunten varias veces sobre el estado de un hash completo seguro específico, haz lo siguiente:
Cada respuesta fullHashes
define una duración negativa de caché para el prefijo solicitado (definido por el
negativeCacheDuration
). Esta duración indica por cuánto tiempo se generan todos los hashes
prefijo se consideran seguras para las listas solicitadas, excepto aquellas devueltas por el servidor como
no seguro. Este almacenamiento en caché es particularmente importante, ya que previene la sobrecarga de tráfico que podría causarse.
por una colisión de prefijo de hash con una URL segura que reciba mucho tráfico.
Consulta la caché
Cuando el cliente quiere verificar el estado de una URL, primero calcula su hash completo. Si la columna
hash está presente en la base de datos local, el cliente debe consultar su caché antes
realiza una solicitud fullHashes
al servidor.
En primer lugar, los clientes deben verificar si hay un acierto de caché positivo. Si hay una caché positiva no vencida
para el hash completo de interés, se debe considerar no segura. Si la entrada de caché positiva
vencido, el cliente debe enviar una solicitud fullHashes
para el prefijo local asociado. Según las
si el servidor devuelve el hash completo, se considera no seguro. De lo contrario, se considera
la seguridad de los recursos aprovisionados.
Si no hay entradas de caché positivas para el hash completo, el cliente debe verificar si hay un valor negativo.
acierto de caché. Si existe una entrada de caché negativa sin vencer para el prefijo local asociado, el
hash completo se considera seguro. Si la entrada de caché negativa venció o no existe, el cliente
Debes enviar una solicitud fullHashes
para el prefijo local asociado y, luego, interpretar la respuesta como normal.
Actualiza la caché
La caché del cliente se debe actualizar cada vez que se recibe una respuesta de fullHashes
. Una caché positiva
una entrada debe crearse o actualizarse para el hash completo según el campo cacheDuration
. El prefijo de hash
La duración negativa de la caché también debe crearse o actualizarse según el negativeCacheDuration
de la respuesta.
.
Si una solicitud fullHashes
posterior no muestra un hash completo que, por el momento, esté de forma positiva
almacenada en caché, el cliente no necesita quitar la entrada de caché positiva. Esto no es motivo de preocupación.
dado que las duraciones positivas de la caché suelen ser cortas (unos minutos) para permitir una
la corrección de los falsos positivos.
Situación de ejemplo
En el siguiente ejemplo, supongamos que h(url) es el prefijo de hash de la URL y H(url) es el hash completo de la URL. Es decir, h(url) = SHA256(url).substr(4), H(url) = SHA256(url).
Ahora, supongamos que un cliente (con una caché vacía) visita example.com/ y ve que h(example.com/) es en la base de datos local. El cliente solicita los hashes completos para el prefijo de hash h(example.com/). y vuelve a recibir el hash completo H(example.com/) junto con una duración de caché positiva de 5. minutos y una duración negativa de caché de 1 hora.
La duración positiva de la caché de 5 minutos le indica al cliente por cuánto tiempo el hash completo
H(example.com/) debe considerarse no seguro sin enviar otra solicitud fullHashes
. Después de las 5
minutos, el cliente debe emitir otra solicitud fullHashes
para ese prefijo h(example.com/) si el
el cliente visita example.com/ nuevamente. El cliente debe restablecer la duración de la caché negativa del prefijo hash
según la respuesta nueva.
La duración de la caché negativa de 1 hora le indica al cliente la duración de todos los demás hashes completos.
además de H(example.com/), que comparten el mismo prefijo de h(example.com/), deben considerarse seguras. Para
la duración de 1 hora, cada URL cuya condición sea h(URL) = h(example.com/) debe considerarse segura
por lo tanto, no se generará una solicitud de fullHashes
(suponiendo que H(URL) != H(example.com/)).
Si la respuesta fullHashes
contiene cero coincidencias y se establece una duración negativa de la caché, el valor
el cliente no debe emitir ninguna solicitud fullHashes
para ninguno de los prefijos solicitados para el
duración de caché negativa.
Si la respuesta fullHashes
contiene una o más coincidencias, se establecerá una duración negativa de la caché.
para toda la respuesta. En ese caso, la duración de la caché de un solo hash completo indica
ese hash completo en particular debe considerarse no seguro por el cliente. Después de almacenar la caché ThreatMatch
transcurra, el cliente debe actualizar el hash completo mediante la emisión de una solicitud fullHashes
para
el prefijo de hash si la URL solicitada coincide con el hash de longitud completo existente en la caché. En ese
en caso de que no se aplique la duración negativa
de la caché. La duración de la caché negativa de la respuesta solo se aplica
a hashes completos que no estaban presentes en la respuesta de fullHashes
. Para hashes completos que
no están presentes en la respuesta, el cliente debe abstenerse de emitir solicitudes fullHashes
hasta que finalice la duración negativa
de la caché.
Ejemplo: fullHashes.find
Haz clic en los vínculos de solicitud y respuesta que se encuentran en el encabezado de la tabla para ver ejemplos completos.
Prefijos de hash Solicitud de fullHashes |
Coincidencias de hash de longitud completa Respuesta de fullHashes |
Comportamiento de almacenamiento en caché |
---|---|---|
"threatEntries": [ {"hash": "0xaaaaaaaa"} ] |
"matches": [], "negativeCacheDuration": "3600.000s" |
No hay coincidencias El cliente no debe enviar ninguna solicitud fullHashes para el prefijo hash 0xaaaaaaaa durante al menos una hora.
Cualquier hash con el prefijo 0xaaaaaaaa se considera seguro durante una hora. |
"threatEntries": [ {"hash": "0xbbbbbbbb"} ] |
"matches": [ "threat": {"hash": "0xbbbbbbbb0000..."} "cacheDuration": "600.000s", ], "negativeCacheDuration": "300.000s" |
Coincidencias posibles. El cliente debe considerar que la URL con el hash completo 0xbbbbbbbb0000... no es segura durante 10 minutos. El el cliente debe considerar que todas las demás URLs con prefijo hash 0xbbbbbbbb son seguras durante 5 minutos. Después de las 5 la entrada de caché negativa de los prefijos de hash vencerá. Dado que la entrada positiva de caché para 0xbbbbbbbb0000... aún no venció, el cliente debe enviar solicitudes fullHashes para todos los hashes
excepto esa. |
"threatEntries": [ {"hash": "0xcccccccc"} ] |
"matches": [ "threat": {"hash": "0xccccccccdddd..."}, "cacheDuration": "600.000s" ], "negativeCacheDuration": "3600.000s" |
Coincidencias posibles. El cliente no debe enviar ninguna solicitud fullHashes para el prefijo hash 0xcccccccc durante al menos 1 h y suponer
ese prefijo sea seguro, excepto si el hash completo de la URL coincide con el hash completo almacenado en caché
0xccccccccdddd.... En ese caso, el cliente debe considerar que la URL no es segura durante 10 minutos.
Después de 10 minutos, vence el hash completo. Cualquier búsqueda posterior de ese hash completo
activa una nueva solicitud fullHashes . |