如果客户端选择在此模式下使用 Google Safe Browsing v5,则客户端行为与 v4 Update API 类似,只是使用了 v5 改进的 API 表面。客户端将在其本地数据库中维护一组威胁列表,这些列表以主机后缀/路径前缀网址表达式的 SHA256 哈希前缀格式表示。每当客户端想要检查特定网址时,都会使用本地威胁列表执行检查。当且仅当存在匹配项时,客户端才会连接到服务器以继续检查。
与上述情况一样,客户端也会维护一个本地缓存,该缓存不必位于永久性存储空间中。
本地威胁列表网址检查程序
当客户端使用实时模式程序并返回值 UNSURE 时,也会执行此程序。
此过程接受单个网址 u,并返回 SAFE 或 UNSAFE。
- 假设
expressions是由网址u生成的后缀/前缀表达式列表。 - 假设
expressionHashes是一个列表,其中的元素是expressions中每个表达式的 SHA256 哈希值。 - 假设
expressionHashPrefixes是一个列表,其中的元素是expressionHashes中每个哈希的前 4 个字节。 - 对于
expressionHashPrefixes的每个expressionHashPrefix:- 在本地缓存中查找
expressionHashPrefix。 - 如果找到缓存条目:
- 确定当前时间是否晚于其到期时间。
- 如果大于:
- 从本地缓存中移除找到的缓存条目。
- 继续循环。
- 如果该值不大于 0,则:
- 从
expressionHashPrefixes中移除此特定expressionHashPrefix。 - 检查
expressionHashes中的相应完整哈希是否在缓存条目中找到。 - 如果找到,则返回
UNSAFE。 - 如果未找到,则继续循环。
- 从
- 如果未找到缓存条目,则继续执行循环。
- 在本地缓存中查找
- 对于
expressionHashPrefixes的每个expressionHashPrefix:- 在本地威胁列表数据库中查找
expressionHashPrefix。 - 如果在本地威胁列表数据库中找不到
expressionHashPrefix,请将其从expressionHashPrefixes中移除。
- 在本地威胁列表数据库中查找
- 使用 RPC SearchHashes 或 REST 方法 hashes.search 将
expressionHashPrefixes发送到 Google 安全浏览 v5 服务器。如果发生错误(包括网络错误、HTTP 错误等),则返回SAFE。否则,让 response 为从 SB 服务器收到的response,这是一个完整哈希的列表,其中包含一些用于标识威胁性质(社会工程、恶意软件等)的辅助信息,以及缓存到期时间expiration。 - 对于
response的每个fullHash:- 将
fullHash插入本地缓存,同时插入expiration。
- 将
- 对于
response的每个fullHash:- 设
isFound为在expressionHashes中查找fullHash的结果。 - 如果
isFound为 False,则继续执行循环。 - 如果
isFound为 True,则返回UNSAFE。
- 设
- 返回
SAFE。