Bases de datos locales

Este documento se aplica al siguiente método: API de Update (v4): threatListUpdates.fetch.

Configuración de la base de datos

Los clientes que usan la API de Update deben configurar una base de datos local y realizar una descarga inicial de las listas de Navegación segura con las que desean trabajar. Para comenzar, puedes compilar y, luego, implementar el paquete safebrowsing de Go (o usarlo para modelar tu propia implementación). Para obtener más información, consulta https://github.com/google/safebrowsing/.

Actualizaciones de bases de datos

Para garantizar la protección contra las últimas amenazas, recomendamos a los clientes que actualicen de manera periódica sus listas locales de Navegación segura con el método threatListUpdates.fetch. La solicitudthreatListUpdates.fetch especifica las listas que se actualizarán. Si los clientes tienen limitaciones de memoria o ancho de banda, también pueden usar la solicitud para establecer restricciones de actualización (consulta Actualiza las restricciones). La respuesta threatListUpdates.fetch muestra una actualización completa o parcial para cada lista, como se explica a continuación.

Actualizaciones completas

Las actualizaciones completas se muestran cuando el cliente deja el campo state en la solicitudthreatListUpdates.fetch vacío o cuando el servidor determina que se requiere una actualización completa. Para actualizaciones completas, solo se muestran adiciones. Se espera que el cliente borre la base de datos local antes de aplicar las actualizaciones y realizar la verificación de validación.

Estado vacío

Las actualizaciones completas se muestran cuando el cliente envía la solicitud inicial de una lista. En este caso, el campo state de la solicitud se deja vacío (porque no hay ningún valor para proporcionar) y el campo newClientState de la respuesta muestra el estado inicial de la lista local. También se muestran las actualizaciones completas cuando el cliente deja vacío el campo state en solicitudes posteriores. Esto forzará una actualización completa y mostrará un estado nuevo en el campo newClientState de la respuesta.

Decisión del servidor

En ocasiones, el servidor de Navegación segura muestra una actualización completa cuando el cliente solo solicitó una actualización parcial. Esto puede ocurrir cuando el cliente primero descarga una versión pequeña de la lista y, luego, la actualiza a una versión más grande. El servidor solo mostrará una actualización completa con la lista completa. Esto también puede ocurrir si el cliente no descargó datos en mucho tiempo y solicita una actualización parcial. De nuevo, el servidor solo mostrará una actualización completa con la lista completa.

Actualizaciones parciales

Las actualizaciones parciales se muestran cuando el cliente proporciona un valor para el campo state en la solicitudthreatListUpdates.fetch (la excepción, como se indicó anteriormente, ocurre cuando el servidor determina que se requiere una actualización completa). En el caso de las actualizaciones parciales, se muestran las adiciones y las eliminaciones. El cliente actualiza las listas en la base de datos local (aplica las eliminaciones antes de las adiciones) y, luego, realiza la verificación de validación.

Incorporaciones

Las incorporaciones son prefijos de hash SHA256 que se deben agregar a la base de datos local. La gran mayoría de los prefijos de hash tienen una longitud de 4 bytes, pero algunos pueden tener cualquier longitud de entre 4 y 32 bytes. Por lo tanto, se podrían mostrar varios conjuntos de adiciones; por ejemplo, uno con los prefijos de 4 bytes y otro con los de 5 bytes.

Si el cliente admite la compresión, la respuesta se puede comprimir con la compresión Rice. Sin embargo, solo se comprimen los prefijos hash de 4 bytes. Los prefijos de hash más largos siempre se envían en formato sin procesar y sin comprimir (consulta Compresión).

Eliminaciones

Las eliminaciones son índices basados en cero de la base de datos de cliente ordenada de forma lexicográfica que señalan las entradas que se deben quitar de la base de datos local. Solo se mostrará un conjunto de eliminaciones.

Si el cliente admite la compresión, se muestran “índices de arroz” y “hashes de arroz”. Si no se admite la compresión, se muestran "índices sin procesar" y "hashes sin procesar" (consulta Compresión).

Verificaciones de validación

Cuando se muestra la respuesta threatListUpdates.fetch, con una actualización completa o parcial, se espera que el cliente realice una verificación de validación.

El cliente primero actualiza las listas en la base de datos local (aplica las eliminaciones antes de las incorporaciones). Luego, el cliente calcula el hash SHA256 de la lista local (ordenada lexicográficamente) y lo compara con la suma de verificación que se muestra en la respuesta. Si los dos valores son iguales, la lista de Navegación segura se considerará "correcta".

Si los dos valores no son iguales, la lista de Navegación segura se considera "dañada". El cliente debe borrar la lista de la base de datos y volver a emitir una segunda actualización con el campo state configurado como la string vacía. Esto forzará una actualización completa y mostrará una lista y un estado nuevos.