Bancos de dados locais

Este documento se aplica ao seguinte método: API Update (v4): threatListUpdates.fetch.

Configuração do banco de dados

Os clientes que usam a API Update precisam configurar um banco de dados local e fazer o download inicial das listas do Navegação segura com que querem trabalhar. Para continuar, crie e implante o pacote Go safebrowsing (ou use-o para modelar sua própria implementação). Para mais informações, consulte https://github.com/google/safebrowsing/.

Atualizações do banco de dados

Para garantir a proteção contra as ameaças mais recentes, recomendamos que os clientes atualizem regularmente as listas locais do Navegação segura usando o método threatListUpdates.fetch. A solicitação threatListUpdates.fetch especifica as listas a serem atualizadas. Se os clientes tiverem limitações de memória ou largura de banda, eles também poderão usar a solicitação para definir restrições de atualização. Consulte Restrições de atualização. A resposta threatListUpdates.fetch retorna uma atualização completa ou parcial para cada lista, conforme explicado abaixo.

Atualizações completas

Atualizações completas são retornadas quando o cliente deixa o campo state na solicitação threatListUpdates.fetch vazio ou quando o servidor determina que uma atualização completa é necessária. Para atualizações completas, somente adições são retornadas. Espera-se que o cliente limpe o banco de dados local antes de aplicar as atualizações e executar a verificação de validação.

Estado vazio

As atualizações completas são retornadas quando o cliente envia a solicitação inicial de uma lista. Nesse caso, o campo state na solicitação é deixado em branco porque não há valor a ser fornecido, e o campo newClientState na resposta retorna o estado inicial da lista local. As atualizações completas também são retornadas quando o cliente deixa intencionalmente o campo state vazio nas solicitações subsequentes. Isso forçará uma atualização completa e retornará um novo estado no campo newClientState da resposta.

Decisão do servidor

Às vezes, o servidor da Navegação segura retorna uma atualização completa quando apenas uma parcial é solicitada pelo cliente. Isso pode acontecer quando o cliente faz o download de uma versão pequena da lista e depois atualiza para uma versão maior dela. O servidor simplesmente retorna uma atualização completa com a lista inteira. Isso também pode acontecer se o cliente não fizer o download de dados por muito tempo e solicitar uma atualização parcial. Novamente, o servidor simplesmente retornará uma atualização completa com a lista inteira.

Atualizações parciais

Atualizações parciais são retornadas quando o cliente fornece um valor para o campo state na solicitação threatListUpdates.fetch. A exceção, conforme mencionado acima, é quando o servidor determina que uma atualização completa é necessária. Para atualizações parciais, adições e remoções são retornadas. O cliente atualiza as listas no banco de dados local (aplicando as remoções antes das adições) e, em seguida, executa a verificação de validação.

Adições

Adições são prefixos de hash SHA256 que devem ser adicionados ao banco de dados local. A grande maioria dos prefixos de hash tem 4 bytes, mas alguns podem ter qualquer tamanho entre 4 e 32 bytes. Portanto, vários conjuntos de adições podem ser retornados. Por exemplo, um contendo os prefixos de 4 bytes e outro de 5 bytes.

Se o cliente for compatível com a compactação, a resposta poderá ser compactada usando a compactação Rice. No entanto, apenas os prefixos de hash de 4 bytes são compactados. Prefixos de hash mais longos são sempre enviados em formato bruto descompactado. Consulte Compactação.

Remoções

As remoções são índices baseados em zero no banco de dados do cliente classificado lexicograficamente que apontam para entradas que precisam ser removidas do banco de dados local. Somente um conjunto de remoções será retornado.

Se o cliente oferecer suporte à compactação, "hashes de arroz" e "índices de arroz" serão retornados. Se a compactação não for compatível, "hashes brutos" e "índices brutos" serão retornados. Consulte Compactação.

Verificações de validação

Quando a resposta threatListUpdates.fetch for retornada (com uma atualização completa ou uma atualização parcial), o cliente deverá executar uma verificação de validação.

Primeiro, o cliente atualiza as listas no banco de dados local (aplicando as remoções antes das adições). Em seguida, o cliente calcula o hash SHA256 da lista local (classificada lexicograficamente) e o compara com a soma de verificação retornada na resposta. Se os dois valores forem iguais, a lista da Navegação segura será considerada "correta".

Se os dois valores não forem iguais, a lista da Navegação segura será considerada "corrompida". O cliente precisa limpar a lista do banco de dados e emitir novamente uma segunda atualização com o campo state definido como a string vazia. Isso forçará uma atualização completa e retornará uma nova lista e um novo estado.