与第 4 版(尤其是 第 4 版更新 API)相比,Google 安全浏览第 5 版的一项重大改进是数据的新鲜度和覆盖面。由于保护高度依赖于客户端维护的本地数据库,因此本地数据库更新的延迟和大小是导致保护缺失的主要原因。在 v4 中,典型客户端需要 20 到 50 分钟才能获取最新版本的威胁列表。遗憾的是,钓鱼式攻击的传播速度很快:截至 2021 年,60% 的攻击网站的存活时间不到 10 分钟。我们的分析表明,大约 25-30% 的钓鱼式攻击防护缺失是由于此类数据过时造成的。此外,某些设备无法管理 Google 安全浏览威胁列表的全部内容,而该列表会随着时间的推移而不断扩大。
如果您目前使用的是 v4 Update API,则可以从 v4 无缝迁移到 v5,而无需重置或清除本地数据库。本部分介绍了如何执行此操作。
转化列表更新
与 V4 不同的是,V4 中的列表是通过威胁类型、平台类型、威胁条目类型的元组来标识的,而 V5 中的列表仅通过名称来标识。这样一来,当多个 v5 列表可以共享同一威胁类型时,便可灵活应对。平台类型和威胁条目类型已在 v5 中移除。
在 v4 中,可以使用 threatListUpdates.fetch 方法下载列表。在 v5 中,用户可以改用 hashLists.batchGet 方法。
应针对请求进行以下更改:
- 完全移除 v4
ClientInfo
对象。您只需使用众所周知的 User-Agent 标头,即可提供客户的身份信息,而无需使用专用字段。虽然此标头中没有规定提供客户端标识的格式,但我们建议您仅包含原始客户端 ID 和客户端版本,并用空格字符或斜杠字符分隔。 - 对于每个 v4
ListUpdateRequest
对象:* 从可用列表中查找相应的 v5 列表名称,并在 v5 请求中提供该名称。- 移除不需要的字段,例如
threat_entry_type
或platform_type
。 - v4 中的
state
字段与 v5 中的versions
字段直接兼容。使用 v4 中的state
字段发送到服务器的相同字节字符串可以简单地使用 v5 中的versions
字段发送。 - 对于 v4 限制,v5 使用了一个名为
SizeConstraints
的简化版本。应舍弃region
等其他字段。
- 移除不需要的字段,例如
应对回答进行以下更改:
- v4 枚举
ResponseType
已被一个名为partial_update
的布尔值字段取代。 minimum_wait_duration
字段现在可以为零或省略。如果为 1,则要求客户端立即发出另一个请求。只有当客户端在SizeConstraints
中指定的更新大小上限小于数据库大小上限时,才会发生这种情况。- 解码 Rice-Golomb 编码哈希的逻辑需要进行两项主要调整:
- 字节序和排序:在 v4 中,返回的哈希值按小端值排序。在 v5 中,它们被视为大端值。由于字节串的字典编排排序等同于大端值的数值排序,因此客户端不再需要执行特殊的排序步骤。如果之前实现了自定义的小端排序,则可以将其移除,例如 Chromium v4 实现中的小端排序。
- 可变哈希长度:必须更新解码算法,以支持
HashList.compressed_additions
字段中可能返回的各种哈希长度,而不仅仅是 v4 中使用的四字节哈希长度。响应中返回的哈希长度可根据从hashLists.list
返回的HashList.metadata.hash_length
来确定。或者,所请求的哈希列表的命名也表示从该列表返回的预期哈希大小。如需详细了解哈希列表,请参阅本地数据库页面。
转化哈希搜索
在 v4 中,可以使用 fullHashes.find 方法获取完整哈希。在 v5 中,等效方法是 the hashes.search 方法。
应针对请求进行以下更改:
- 调整代码结构,使其仅发送长度正好为 4 个字节的哈希前缀。
- 完全移除 v4
ClientInfo
对象。您只需使用众所周知的 User-Agent 标头,即可提供客户的身份信息,而无需使用专用字段。虽然此标头中没有规定提供客户端标识的格式,但我们建议您仅包含原始客户端 ID 和客户端版本,并用空格字符或斜杠字符分隔。 - 移除
client_states
字段。不再需要此函数。 - 现在无需再添加
threat_types
和类似字段。
应对回答进行以下更改:
minimum_wait_duration
字段已移除。客户端可以随时根据需要发出新请求。- v4
ThreatMatch
对象已简化为FullHash
对象。 - 缓存已简化为单个缓存时长。如需了解如何与缓存互动,请参阅上述程序。