如果客户端选择在无存储实时模式下使用 Google 安全浏览 v5,则无需维护任何持久性本地数据库。不过,客户端仍应维护本地缓存。此类本地缓存不必位于持久性存储空间中,并且在内存压力过大时可能会被清除。
每当客户端想要检查特定网址时,客户端始终会连接到服务器以执行检查。此模式类似于 v4 Lookup API 的客户端可能实现的模式。
与实时模式相比,此模式可能会使用更多网络带宽,但如果客户端不方便维护持久的本地状态,则此模式可能更适合。
不使用本地数据库的实时网址检查程序
此过程接受单个网址 u,并返回 SAFE 或 UNSAFE。
- 假设
expressions是由网址u生成的后缀/前缀表达式列表。 - 假设
expressionHashes是一个列表,其中的元素是expressions中每个表达式的 SHA256 哈希值。 - 假设
expressionHashPrefixes是一个列表,其中的元素是expressionHashes中每个哈希的前 4 个字节。 - 对于
expressionHashPrefixes的每个expressionHashPrefix:- 在本地缓存中查找
expressionHashPrefix。 - 如果找到缓存条目:
- 确定当前时间是否晚于其到期时间。
- 如果大于:
- 从本地缓存中移除找到的缓存条目。
- 继续循环。
- 如果该值不大于 0,则:
- 从
expressionHashPrefixes中移除此特定expressionHashPrefix。 - 检查
expressionHashes中的相应完整哈希是否在缓存条目中找到。 - 如果找到,则返回
UNSAFE。 - 如果未找到,则继续循环。
- 从
- 如果未找到缓存条目,则继续执行循环。
- 在本地缓存中查找
- 使用 RPC SearchHashes 或 REST 方法 hashes.search 向 Google 安全浏览 v5 服务器发送
expressionHashPrefixes。如果发生错误(包括网络错误、HTTP 错误等),则返回SAFE。否则,让 response 为从 SB 服务器收到的response,这是一个完整哈希的列表,其中包含一些用于标识威胁性质(社会工程、恶意软件等)的辅助信息,以及缓存到期时间expiration。 - 对于
response的每个fullHash:- 将
fullHash与expiration一起插入本地缓存。
- 将
- 对于
response的每个fullHash:- 设
isFound为在expressionHashes中查找fullHash的结果。 - 如果
isFound为 False,则继续执行循环。 - 如果
isFound为 True,则返回UNSAFE。
- 设
- 返回
SAFE。
与实时模式一样,此程序未明确指定如何将哈希前缀发送到服务器。例如,客户端可以将所有 expressionHashPrefixes 都放在一个请求中发送,也可以将 expressionHashPrefixes 中的每个单独的前缀放在单独的请求中发送到服务器(可能并行进行)。客户端也可以发送不相关或随机生成的哈希前缀,以及 expressionHashPrefixes 中的哈希前缀,前提是单个请求中发送的哈希前缀数量不超过 30 个。