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.
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.
À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.