Real Time Mode

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.

  1. Seja expressions uma lista de expressões de sufixo/prefixo geradas pelo URL u.
  2. Seja expressionHashes uma lista em que os elementos são hashes SHA256 de cada expressão em expressions.
  3. Para cada hash de expressionHashes:
    1. Se hash puder ser encontrado no cache global, retorne UNSURE.
  4. Seja expressionHashPrefixes uma lista em que os elementos são os primeiros quatro bytes de cada hash em expressionHashes.
  5. Para cada expressionHashPrefix de expressionHashPrefixes:
    1. Pesquisar expressionHashPrefix no cache local.
    2. Se a entrada em cache for encontrada:
      1. Determine se o horário atual é maior que o prazo de validade.
      2. Se for maior:
        1. Remova a entrada em cache encontrada do cache local.
        2. Continue com o loop.
      3. Se não for maior:
        1. Remova esse expressionHashPrefix específico de expressionHashPrefixes.
        2. Verifique se o hash completo correspondente em expressionHashes é encontrado na entrada em cache.
        3. Se encontrado, retorne UNSAFE.
        4. Se não for encontrado, continue com o loop.
    3. Se a entrada em cache não for encontrada, continue com o loop.
  6. Envie expressionHashPrefixes ao 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.), retorne UNSURE. Caso contrário, deixe a resposta ser o response recebido 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 cache expiration.
  7. Para cada fullHash de response:
    1. Insira fullHash no cache local, junto com expiration.
  8. Para cada fullHash de response:
    1. Seja isFound o resultado de encontrar fullHash em expressionHashes.
    2. Se isFound for "False", continue com o loop.
    3. Se isFound for verdadeiro, retorne UNSAFE.
  9. 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.