URL のハッシュ化

概要

Web Risk リストは、可変長の SHA256 ハッシュで構成されています。詳しくは、リストの内容をご覧ください。URL をローカルまたはサーバー上で Web Risk リストと照合するには、クライアントはまずその URL のハッシュ プレフィックスを計算する必要があります。

URL のハッシュ プレフィックスを計算するには、次の手順に従います。

  1. 正規化の説明に従って、URL を正規化します。
  2. サフィックス / プレフィックス式の説明に従って、URL のサフィックス / プレフィックス式を作成します。
  3. ハッシュの計算で説明されているように、各サフィックス / プレフィックス式のフルレングスのハッシュを計算します。
  4. ハッシュ プレフィックスの計算の説明に従って、各ハッシュのフルレングスのハッシュ プレフィックスを計算します。

これらの手順は、Web Risk サーバーが Web Risk リストを管理するために使用するプロセスと同じです。

正規化

まず、クライアントが URL を解析し、RFC 2396 に従って有効にしていることを前提としています。URL で国際化ドメイン名(IDN)を使用している場合、クライアントは URL を ASCII Punycode 表記に変換する必要があります。URL にはパス コンポーネントを含める必要があります。つまり、先頭にスラッシュ(http://google.com/)が必要です。

まず、URL からタブ(0x09)、CR(0x0d)、LF(0x0a)を削除します。これらの文字のエスケープ シーケンス(%0aなど)は削除しないでください。

2 つ目は、URL の末尾がフラグメントになっている場合は、フラグメントを削除します。たとえば、http://google.com/#fraghttp://google.com/ に短縮します。

3 つ目に、パーセント エスケープがなくなるまで繰り返して、URL からパーセント エスケープを削除します。

ホスト名を正規化するには

URL からホスト名を抽出し、次の操作を行います。

  1. 先頭と末尾のドットをすべて削除する。
  2. 連続するドットを 1 つのドットに置き換える。
  3. ホスト名を IP アドレスとして解析できる場合は、4 つのドット区切りの 10 進数値に正規化する。クライアントは、8 進数、16 進数、4 つ未満のコンポーネントなど、有効な IP アドレス エンコードを処理する必要があります。
  4. 文字列全体を小文字にする。

パスを正規化するには

  1. パス内のシーケンス /..//./ を解決するには、/.// に置き換え、/../ を前のパス コンポーネントとともに削除します。
  2. 連続するスラッシュの実行は単一のスラッシュ文字に置き換えます。

これらのパスの正規化をクエリ パラメータに適用しないでください。

URL 内で、ASCII 32 以下、127 以上、#% のすべての文字をパーセント エスケープします。エスケープには大文字の 16 進数を使用する必要があります。

正規化の実装を検証するためのテストを以下に示します。

Canonicalize("http://host/%25%32%35") = "http://host/%25";
Canonicalize("http://host/%25%32%35%25%32%35") = "http://host/%25%25";
Canonicalize("http://host/%2525252525252525") = "http://host/%25";
Canonicalize("http://host/asdf%25%32%35asd") = "http://host/asdf%25asd";
Canonicalize("http://host/%%%25%32%35asd%%") = "http://host/%25%25%25asd%25%25";
Canonicalize("http://www.google.com/") = "http://www.google.com/";
Canonicalize("http://%31%36%38%2e