解説
Browser fingerprintingは、ブラウザからさまざまな属性を収集し、安定した識別子に変換します。クッキーがなくても、User-Agent、言語、タイムゾーン、画面解像度、インストールされたフォント、キャンバスレンダリングハッシュ、WebGLレンダラー文字列、オーディオコンテキストフィンガープリント、その他数十のシグナルの組み合わせは、驚くほどの精度で単一のブラウザをセッションをまたいで識別できるほど固有です。
大きく分けてパッシブとアクティブの2種類のfingerprintingがあります。パッシブfingerprintingは、ブラウザが暗黙的に公開する属性(User-Agent、Accept-Language、sec-ch-uaクライアントヒント)を読み取ります。アクティブfingerprintingは、ブラウザのレンダリングエンジン、オーディオエンジン、GPU、タイミング特性を調べるJavaScriptを実行し、ハッシュを計算します。
スクレイピングと自動化において、fingerprintingが重要なのはIPローテーションだけでは不十分だからです。10,000件のレジデンシャルIPをローテーションしても、すべてのリクエストが同じキャンバスフィンガープリントと同じPlaywrightデフォルトのUser-Agentを持っていれば、接続先は10,000件すべてのリクエストを同一のスクレイパーインスタンスに関連付けることができます。現代のアンチボットシステム(Cloudflare、Akamai、PerimeterX、Datadome)はすべて、IP分析と並行してfingerprintingを多用しています。
仕組み
ブラウザがフィンガープリントコードを含むページを読み込むと、スクリプトはブラウザのプロパティ(UA、言語、プラグイン、画面、タイムゾーン)を列挙し、特定のテキストやグラデーションを使って非表示のキャンバスを描画してレンダリングされたピクセルを読み取り(キャンバスフィンガープリント)、WebGL コンテキストを作成してGPU ベンダーとレンダラーの文字列を読み取り(WebGL フィンガープリント)、audio API でトーンを生成してスペクトルを読み取り(オーディオフィンガープリント)、ハードウェアシグナルのために特定の操作(math.tan、performance.now のドリフト)のタイミングを計測します。
これらの値はすべてフィンガープリントID にハッシュ化されてサーバーに送り返されます。これらの属性が十数個組み合わさるだけで非常に高いユニーク性を持つため、生成されたID はクッキーの削除、新しいセッション、異なるIP をまたいでブラウザを安定して識別します。