Migration From V4

与第 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 方法

应针对请求进行以下更改:

  1. 完全移除 v4 ClientInfo 对象。您只需使用众所周知的 User-Agent 标头,即可提供客户的身份信息,而无需使用专用字段。虽然此标头中没有规定提供客户端标识的格式,但我们建议您仅包含原始客户端 ID 和客户端版本,并用空格字符或斜杠字符分隔。
  2. 对于每个 v4 ListUpdateRequest 对象:* 从可用列表中查找相应的 v5 列表名称,并在 v5 请求中提供该名称。
    • 移除不需要的字段,例如 threat_entry_typeplatform_type
    • v4 中的 state 字段与 v5 中的 versions 字段直接兼容。使用 v4 中的 state 字段发送到服务器的相同字节字符串可以简单地使用 v5 中的 versions 字段发送。
    • 对于 v4 限制,v5 使用了一个名为 SizeConstraints 的简化版本。应舍弃 region 等其他字段。

应对回答进行以下更改:

  1. v4 枚举 ResponseType 已被一个名为 partial_update 的布尔值字段取代。
  2. minimum_wait_duration 字段现在可以为零或省略。如果为 1,则要求客户端立即发出另一个请求。只有当客户端在 SizeConstraints 中指定的更新大小上限小于数据库大小上限时,才会发生这种情况。
  3. 解码 Rice-Golomb 编码哈希的逻辑需要进行两项主要调整:
    • 字节序和排序:在 v4 中,返回的哈希值按小端值排序。在 v5 中,它们被视为大端值。由于字节串的字典编排排序等同于大端值的数值排序,因此客户端不再需要执行特殊的排序步骤。如果之前实现了自定义的小端排序,则可以将其移除,例如 Chromium v4 实现中的小端排序。
    • 可变哈希长度:必须更新解码算法,以支持 HashList.compressed_additions 字段中可能返回的各种哈希长度,而不仅仅是 v4 中使用的四字节哈希长度。响应中返回的哈希长度可根据从 hashLists.list 返回的 HashList.metadata.hash_length 来确定。或者,所请求的哈希列表的命名也表示从该列表返回的预期哈希大小。如需详细了解哈希列表,请参阅本地数据库页面。

转化哈希搜索

在 v4 中,可以使用 fullHashes.find 方法获取完整哈希。在 v5 中,等效方法是 the hashes.search 方法

应针对请求进行以下更改:

  1. 调整代码结构,使其仅发送长度正好为 4 个字节的哈希前缀。
  2. 完全移除 v4 ClientInfo 对象。您只需使用众所周知的 User-Agent 标头,即可提供客户的身份信息,而无需使用专用字段。虽然此标头中没有规定提供客户端标识的格式,但我们建议您仅包含原始客户端 ID 和客户端版本,并用空格字符或斜杠字符分隔。
  3. 移除 client_states 字段。不再需要此函数。
  4. 现在无需再添加 threat_types 和类似字段。

应对回答进行以下更改:

  1. minimum_wait_duration 字段已移除。客户端可以随时根据需要发出新请求。
  2. v4 ThreatMatch 对象已简化为 FullHash 对象。
  3. 缓存已简化为单个缓存时长。如需了解如何与缓存互动,请参阅上述程序。