Google セーフ ブラウジング v5 の v4(特に v4 Update API)に対する大きな改善点の 1 つは、データの鮮度とカバレッジです。保護はクライアントが維持するローカル データベースに大きく依存しているため、ローカル データベースの更新の遅延とサイズが、保護の失敗の主な原因となります。v4 では、一般的なクライアントが最新バージョンの脅威リストを取得するのに 20 ~ 50 分かかります。残念ながら、フィッシング攻撃は急速に拡大しています。2021 年の時点で、攻撃を配信するサイトの 60% は 10 分未満で消滅しています。Google の分析によると、フィッシング対策が欠落している原因の約 25 ~ 30% は、このようなデータの古さによるものです。また、一部のデバイスは、Google セーフ ブラウジングの脅威リスト全体を管理する機能を備えていません。このリストは、時間の経過とともに拡大し続けています。
現在 v4 Update API を使用している場合は、ローカル データベースをリセットまたは消去することなく、v4 から v5 へのシームレスな移行パスがあります。このセクションでは、その方法について説明します。
リストの更新を変換する
V4 ではリストは脅威タイプ、プラットフォーム タイプ、脅威エントリ タイプのタプルで識別されますが、v5 ではリストは名前で識別されます。これにより、複数の v5 リストで同じ脅威タイプを共有する場合に柔軟性が得られます。v5 では、プラットフォーム タイプと脅威エントリ タイプが削除されています。
v4 では、threatListUpdates.fetch メソッドを使用してリストをダウンロードします。v5 では、hashLists.batchGet メソッドに切り替えます。
リクエストに次の変更を加える必要があります。
- v4
ClientInfo
オブジェクトを完全に削除します。専用のフィールドを使用してクライアントの識別情報を指定する代わりに、よく知られている User-Agent ヘッダーを使用するだけです。このヘッダーでクライアント ID を指定する形式は規定されていませんが、元のクライアント ID とクライアント バージョンをスペース文字またはスラッシュ文字で区切って含めることをおすすめします。 - 各 v4
ListUpdateRequest
オブジェクトについて:- 利用可能なリストから対応する v5 リスト名を探し、その名前を v5 リクエストで指定します。
threat_entry_type
やplatform_type
などの不要なフィールドを削除します。- v4 の
state
フィールドは、v5 のversions
フィールドと直接互換性があります。v4 のstate
フィールドを使用してサーバーに送信されるバイト文字列は、v5 のversions
フィールドを使用して送信できます。 - v4 制約の場合、v5 では
SizeConstraints
という簡略版が使用されます。region
などの追加フィールドは削除する必要があります。
レスポンスに次の変更を加える必要があります。
- v4 の enum
ResponseType
は、partial_update
という名前のブール値フィールドに置き換えられます。 minimum_wait_duration
フィールドは、ゼロまたは省略できるようになりました。その場合、クライアントは直ちに別のリクエストを行うよう求められます。これは、クライアントがSizeConstraints
で、データベースの最大サイズよりも小さい最大更新サイズの制約を指定した場合にのみ発生します。- 32 ビット整数の Rice デコード アルゴリズムを調整する必要があります。違いは、エンコードされたデータが異なるエンディアンでエンコードされていることです。v4 と v5 の両方で、32 ビットのハッシュ プレフィックスは辞書順に並べ替えられます。ただし、v4 では、これらの接頭辞は並べ替え時にリトル エンディアンとして扱われますが、v5 ではビッグ エンディアンとして扱われます。つまり、辞書式順序の並べ替えはビッグ エンディアンの数値順序の並べ替えと同じであるため、クライアント側で並べ替えを行う必要はありません。v4 の Chromium 実装におけるこの種の例は、こちらで確認できます。このような並べ替えは削除できます。
- Rice デコード アルゴリズムは、他のハッシュ長にも実装する必要があります。
ハッシュ検索の変換
v4 では、fullHashes.find メソッドを使用して完全なハッシュを取得します。v5 の同等のメソッドは the hashes.search メソッドです。
リクエストに次の変更を加える必要があります。
- コードを構造化して、長さが 4 バイトのハッシュ プレフィックスのみを送信します。
- v4
ClientInfo
オブジェクトをすべて削除します。専用のフィールドを使用してクライアントの識別情報を指定する代わりに、よく知られている User-Agent ヘッダーを使用するだけです。このヘッダーでクライアント ID を指定する形式は規定されていませんが、元のクライアント ID とクライアント バージョンをスペース文字またはスラッシュ文字で区切って含めることをおすすめします。 client_states
フィールドを削除します。不要になりました。threat_types
などのフィールドを含める必要はなくなりました。
レスポンスに次の変更を加える必要があります。
minimum_wait_duration
フィールドが削除されました。クライアントは必要に応じていつでも新しいリクエストを発行できます。- v4
ThreatMatch
オブジェクトがFullHash
オブジェクトに簡略化されました。 - キャッシュ保存期間が 1 つに簡素化されました。キャッシュの操作については、上記の手順をご覧ください。