Quando os clientes optam por usar o Google Navegação Segura v5 no modo em tempo real, eles mantêm no banco de dados local: (i) um cache global de sites provavelmente benignos, formatado como hashes SHA256 de expressões de URL de sufixo de host/prefixo de caminho, (ii) um conjunto de listas de ameaças, formatado como prefixos de hash SHA256 de expressões de URL de sufixo de host/prefixo de caminho. A ideia geral é que, sempre que o cliente quiser verificar um URL específico, uma verificação local será realizada usando o cache global. Se essa verificação for aprovada, uma verificação local das listas de ameaças será realizada. Caso contrário, o cliente continua com a verificação de hash em tempo real, conforme detalhado abaixo.
Além do banco de dados local, o cliente vai manter um cache local. Esse cache local não precisa estar em armazenamento permanente e pode ser limpo em caso de pressão na memória.
Confira abaixo uma especificação detalhada do procedimento.
O procedimento de verificação de URLs em tempo real
Esse procedimento usa um único URL u e retorna SAFE, UNSAFE ou UNSURE. Se ele retornar SAFE, o URL será considerado seguro pela Navegação segura do Google. Se ele retornar UNSAFE, o URL será considerado potencialmente não seguro pela Navegação Segura do Google, e será necessário tomar as medidas adequadas, como mostrar um aviso ao usuário final, mover uma mensagem recebida para a pasta de spam ou exigir uma confirmação extra do usuário antes de continuar. Se ele retornar UNSURE, use o procedimento de verificação local a seguir.
- Seja
expressionsuma lista de expressões de sufixo/prefixo geradas pelo URLu. - Seja
expressionHashesuma lista em que os elementos são hashes SHA256 de cada expressão emexpressions. - Para cada
hashdeexpressionHashes:- Se
hashpuder ser encontrado no cache global, retorneUNSURE.
- Se
- Seja
expressionHashPrefixesuma lista em que os elementos são os primeiros quatro bytes de cada hash emexpressionHashes. - Para cada
expressionHashPrefixdeexpressionHashPrefixes:- Pesquisar
expressionHashPrefixno cache local. - Se a entrada em cache for encontrada:
- Determine se o horário atual é maior que o prazo de validade.
- Se for maior:
- Remova a entrada em cache encontrada do cache local.
- Continue com o loop.
- Se não for maior:
- Remova esse
expressionHashPrefixespecífico deexpressionHashPrefixes. - Verifique se o hash completo correspondente em
expressionHashesé encontrado na entrada em cache. - Se encontrado, retorne
UNSAFE. - Se não for encontrado, continue com o loop.
- Remova esse
- Se a entrada em cache não for encontrada, continue com o loop.
- Pesquisar
- Envie
expressionHashPrefixesao servidor da Navegação segura v5 do Google usando RPC SearchHashes ou o método REST hashes.search. Se ocorrer um erro (incluindo erros de rede, erros HTTP etc.), retorneUNSURE. Caso contrário, deixe a resposta ser oresponserecebido do servidor SB, que é uma lista de hashes completos com algumas informações auxiliares que identificam a natureza da ameaça (engenharia social, malware etc.), bem como o tempo de expiração do cacheexpiration. - Para cada
fullHashderesponse:- Insira
fullHashno cache local, junto comexpiration.
- Insira
- Para cada
fullHashderesponse:- Seja
isFoundo resultado de encontrarfullHashemexpressionHashes. - Se
isFoundfor "False", continue com o loop. - Se
isFoundfor verdadeiro, retorneUNSAFE.
- Seja
- Retorne o
SAFE.
Embora esse protocolo especifique quando o cliente envia expressionHashPrefixes ao servidor, ele não especifica exatamente como enviá-los. Por exemplo, é aceitável que o cliente envie todos os expressionHashPrefixes em uma única solicitação, e também é aceitável que ele envie cada prefixo individual em expressionHashPrefixes para o servidor em solicitações separadas (talvez em paralelo). Também é aceitável que o cliente envie prefixos de hash não relacionados ou gerados aleatoriamente junto com os prefixos de hash em expressionHashPrefixes, desde que o número de prefixos de hash enviados em uma única solicitação não exceda 30.