Real Time Mode

当客户端选择以实时模式使用 Google 安全浏览 v5 时,客户端将在其本地数据库中维护:(i) 可能良性的网站的全局缓存,格式为主机后缀/路径前缀网址表达式的 SHA256 哈希值;(ii) 一组威胁列表,格式为主机后缀/路径前缀网址表达式的 SHA256 哈希前缀。大致思路是,每当客户端想要检查特定网址时,都会使用全局缓存执行本地检查。如果该检查通过,则执行本地威胁列表检查。否则,客户端会继续执行实时哈希检查,具体如下所述。

除了本地数据库之外,客户端还会维护一个本地缓存。此类本地缓存不必位于持久性存储空间中,并且在内存压力过大时可能会被清除。

有关该程序的详细规范,请参阅下文。

实时网址检查程序

此过程接受单个网址 u 并返回 SAFEUNSAFEUNSURE。如果返回 SAFE,则表示 Google 安全浏览功能认为该网址安全。如果返回 UNSAFE,则表示 Google 安全浏览认为相应网址可能不安全,应采取适当的措施,例如向最终用户显示警告、将收到的消息移至“垃圾内容”文件夹,或要求用户在继续操作之前进行额外确认。如果返回 UNSURE,则应随后使用以下本地检查程序。

  1. 假设 expressions 是由网址 u 生成的后缀/前缀表达式列表。
  2. 假设 expressionHashes 是一个列表,其中的元素是 expressions 中每个表达式的 SHA256 哈希值。
  3. 对于 expressionHashes 的每个 hash
    1. 如果可以在全局缓存中找到 hash,则返回 UNSURE
  4. 假设 expressionHashPrefixes 是一个列表,其中的元素是 expressionHashes 中每个哈希的前 4 个字节。
  5. 对于 expressionHashPrefixes 的每个 expressionHashPrefix
    1. 在本地缓存中查找 expressionHashPrefix
    2. 如果找到缓存条目:
      1. 确定当前时间是否晚于其到期时间。
      2. 如果大于:
        1. 从本地缓存中移除找到的缓存条目。
        2. 继续循环。
      3. 如果该值不大于 0,则:
        1. expressionHashPrefixes 中移除此特定 expressionHashPrefix
        2. 检查 expressionHashes 中的相应完整哈希是否在缓存条目中找到。
        3. 如果找到,则返回 UNSAFE
        4. 如果未找到,则继续循环。
    3. 如果未找到缓存条目,则继续执行循环。
  6. 使用 RPC SearchHashes 或 REST 方法 hashes.searchexpressionHashPrefixes 发送到 Google 安全浏览 v5 服务器。如果发生错误(包括网络错误、HTTP 错误等),则返回 UNSURE。否则,让 response 为从 SB 服务器收到的 response,这是一个完整哈希的列表,其中包含一些用于标识威胁性质(社会工程、恶意软件等)的辅助信息,以及缓存到期时间 expiration
  7. 对于 response 的每个 fullHash
    1. fullHashexpiration 一起插入本地缓存。
  8. 对于 response 的每个 fullHash
    1. 假设 isFound 是在 expressionHashes 中查找 fullHash 的结果。
    2. 如果 isFound 为 False,则继续执行循环。
    3. 如果 isFound 为 True,则返回 UNSAFE
  9. 返回 SAFE

虽然此协议指定了客户端向服务器发送 expressionHashPrefixes时间,但有意未指定确切的发送方式。例如,客户端可以将所有 expressionHashPrefixes 都放在一个请求中发送,也可以将 expressionHashPrefixes 中的每个单独的前缀放在单独的请求中发送到服务器(可能并行进行)。客户端也可以发送不相关或随机生成的哈希前缀,以及 expressionHashPrefixes 中的哈希前缀,前提是单个请求中发送的哈希前缀数量不超过 30 个。