当客户端选择以实时模式使用 Google 安全浏览 v5 时,客户端将在其本地数据库中维护:(i) 可能良性的网站的全局缓存,格式为主机后缀/路径前缀网址表达式的 SHA256 哈希值;(ii) 一组威胁列表,格式为主机后缀/路径前缀网址表达式的 SHA256 哈希前缀。大致思路是,每当客户端想要检查特定网址时,都会使用全局缓存执行本地检查。如果该检查通过,则执行本地威胁列表检查。否则,客户端会继续执行实时哈希检查,具体如下所述。
除了本地数据库之外,客户端还会维护一个本地缓存。此类本地缓存不必位于持久性存储空间中,并且在内存压力过大时可能会被清除。
有关该程序的详细规范,请参阅下文。
实时网址检查程序
此过程接受单个网址 u 并返回 SAFE、UNSAFE 或 UNSURE。如果返回 SAFE,则表示 Google 安全浏览功能认为该网址安全。如果返回 UNSAFE,则表示 Google 安全浏览认为相应网址可能不安全,应采取适当的措施,例如向最终用户显示警告、将收到的消息移至“垃圾内容”文件夹,或要求用户在继续操作之前进行额外确认。如果返回 UNSURE,则应随后使用以下本地检查程序。
- 假设
expressions是由网址u生成的后缀/前缀表达式列表。 - 假设
expressionHashes是一个列表,其中的元素是expressions中每个表达式的 SHA256 哈希值。 - 对于
expressionHashes的每个hash:- 如果可以在全局缓存中找到
hash,则返回UNSURE。
- 如果可以在全局缓存中找到
- 假设
expressionHashPrefixes是一个列表,其中的元素是expressionHashes中每个哈希的前 4 个字节。 - 对于
expressionHashPrefixes的每个expressionHashPrefix:- 在本地缓存中查找
expressionHashPrefix。 - 如果找到缓存条目:
- 确定当前时间是否晚于其到期时间。
- 如果大于:
- 从本地缓存中移除找到的缓存条目。
- 继续循环。
- 如果该值不大于 0,则:
- 从
expressionHashPrefixes中移除此特定expressionHashPrefix。 - 检查
expressionHashes中的相应完整哈希是否在缓存条目中找到。 - 如果找到,则返回
UNSAFE。 - 如果未找到,则继续循环。
- 从
- 如果未找到缓存条目,则继续执行循环。
- 在本地缓存中查找
- 使用 RPC SearchHashes 或 REST 方法 hashes.search 将
expressionHashPrefixes发送到 Google 安全浏览 v5 服务器。如果发生错误(包括网络错误、HTTP 错误等),则返回UNSURE。否则,让 response 为从 SB 服务器收到的response,这是一个完整哈希的列表,其中包含一些用于标识威胁性质(社会工程、恶意软件等)的辅助信息,以及缓存到期时间expiration。 - 对于
response的每个fullHash:- 将
fullHash与expiration一起插入本地缓存。
- 将
- 对于
response的每个fullHash:- 假设
isFound是在expressionHashes中查找fullHash的结果。 - 如果
isFound为 False,则继续执行循环。 - 如果
isFound为 True,则返回UNSAFE。
- 假设
- 返回
SAFE。
虽然此协议指定了客户端向服务器发送 expressionHashPrefixes 的时间,但有意未指定确切的发送方式。例如,客户端可以将所有 expressionHashPrefixes 都放在一个请求中发送,也可以将 expressionHashPrefixes 中的每个单独的前缀放在单独的请求中发送到服务器(可能并行进行)。客户端也可以发送不相关或随机生成的哈希前缀,以及 expressionHashPrefixes 中的哈希前缀,前提是单个请求中发送的哈希前缀数量不超过 30 个。