No Storage Real Time Mode

如果客户端选择在无存储实时模式下使用 Google 安全浏览 v5,则无需维护任何持久性本地数据库。不过,客户端仍应维护本地缓存。此类本地缓存不必位于持久性存储空间中,并且在内存压力过大时可能会被清除。

每当客户端想要检查特定网址时,客户端始终会连接到服务器以执行检查。此模式类似于 v4 Lookup API 的客户端可能实现的模式。

与实时模式相比,此模式可能会使用更多网络带宽,但如果客户端不方便维护持久的本地状态,则此模式可能更适合。

不使用本地数据库的实时网址检查程序

此过程接受单个网址 u,并返回 SAFEUNSAFE

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

实时模式一样,此程序未明确指定如何将哈希前缀发送到服务器。例如,客户端可以将所有 expressionHashPrefixes 都放在一个请求中发送,也可以将 expressionHashPrefixes 中的每个单独的前缀放在单独的请求中发送到服务器(可能并行进行)。客户端也可以发送不相关或随机生成的哈希前缀,以及 expressionHashPrefixes 中的哈希前缀,前提是单个请求中发送的哈希前缀数量不超过 30 个。