サイトの保護技術と収集されている情報を確認する方法
パーサー書いたことや実際のウェブサイトでE2Eテストを構築したことのある人なら 누구나、スクリプトが突然403ステータスを返したり、空白ページへの無限リダイレクトに遭遇した経験があるでしょう。DevToolsでNetworkタブとApplicationタブを行き来しながら推測に費やす:Cloudflareがリクエストをブロックしたのか、DataDomeが不可視のチェックリストを忍び込ませたのか、それともページスクリプトがCanvasやWebGLのフィンガープリントを密かに取得しているのか。
ScrapflyチームはScrapfly Anti-bot DetectorというオープンソースのChrome拡張機能をリリースしました。セキュリティ研究者、ペネトレーションテスター、パーサー開発者向けのツールで、ページをリアルタイムで分析し、どの保護システムが有効か、どのフィンガープリント技術が今すぐトリガーされているかを表示します。
この拡張機能で検出できること
この拡張機能はManifest V3で動作し、外部サーバーにデータを送信しません。すべての分析はブラウザ内でローカルに実行されます。
検出した保護メカニズムを3つのカテゴリに分類します:
- Bot対策システム。Cloudflare、Akamai、DataDome、PerimeterX、Imperva、Kasada、Shape Security、AWS WAFを検出します。
- CAPTCHA。reCAPTCHA、hCaptcha、FunCaptcha、GeeTest、Cloudflare Turnstileを見つけます。
- デジタルフィンガープリント技術。Canvas、WebGL、AudioContext、フォント、WebRTC、Performance API、Navigatorプロパティ、Storageなど、21種類のフィンガープリント手法を追跡します。
| 検出 | 履歴 | ルールエディタ |
|---|---|---|
|
|
|
|
マルチレイヤー検出の仕組み
Bot対策システムはめったに明示的なレスポンスヘッダーで自身を明かしません。通常、ロジックをスクリプト、Cookie、グローバルオブジェクトに分散させます。この拡張機能は5つの分析レイヤーを同時に使用します。
まず、DOMを検査します。拡張機能は特徴的なマークアップ要素、クラス名、接続された外部スクリプトを探します。
並行して、Service Workerがネットワークリクエストを監視し、ヘッダー、Cookie、リクエストURL、送信ペイロードのボディをフィルタリングします。
最も興味深い部分は、ブラウザAPI呼び出しの傍受です。ページスクリプトの実行開始前(document_startステージ)に、拡張機能がページのメインコンテキスト(MAIN world)にフックを挿入します。保護スクリプトがキャンバスに非表示要素を描画したり、オーディオコンテキストパラメータをリクエストしようとすると、フックが呼び出しを記録し、パラメータを収集し、分離されたブリッジを通じて検出モジュールに渡します。
フックは永久にアクティブなままではありません:非活動状態が2秒間続いた後、またはページ開始から8秒後に自動的にアンロードされます。
| データ抽出ツール | 設定 |
|---|---|---|
|
|
|
詳細分析のための組み込みツール
検出されたベンダーの単純なリストだけでなく、拡張機能にはAdvanced Toolsセクションが含まれています。これは自動化デバッグに必要なパラメータを抽出するという実用的な問題を解決します。
- reCAPTCHA、hCaptcha、Turnstileについては、SiteKey、コンテナセレクター、登録済みJSコールバックを見つけます。
- AkamaiとDataDomeについては、生成されたセンサーデータを傍受し、保護Cookieの有効性を分析します。
- FunCaptchaとGeeTestについては、公開鍵とチャレンジパラメータを解析します。
- ImpervaとShape Securityについては、特定のヘッダーと関連するバリデーションスクリプトをスキャンします。
このツールは、ブラウザがターゲットページに最終リダイレクトを行う前に、中間チャレンジページからデータをキャプチャできます。
プロジェクトアーキテクチャとビルド不要
ソースコードはバンドラー、Webpack、TypeScriptなしで純粋な最新のJavaScriptで書かれています。プロジェクトをローカルで実行するには、リポジトリをクローンし、開発者モードでChromeにフォルダを読み込むだけです。
リポジトリ構造は明確なレイヤーに分かれています:
core/
├── manifest.json # Конфигурация Manifest V3
├── background.js # Service Worker, сетевой анализ
├── content.js # Content script в ISOLATED world
├── content-main-world.js # JS-хуки в MAIN world
├── detectors/ # Правила детекции в формате JSON
│ ├── antibot/ # Cloudflare, Akamai, DataDome, Imperva
│ ├── captcha/ # reCAPTCHA, Turnstile, hCaptcha
│ └── fingerprint/ # Canvas, WebGL, Audio, Storage
└── modules/ # Менеджеры состояния и обработчики
すべての検出シグネチャとルールはdetectors/ディレクトリのJSONファイルに抽出されています。組み込みのルールエディタを通じて拡張機能インターフェースで直接編集でき、カスタム正規表現、グローバルなwindowオブジェクト変数のチェック、カスタムCookieシグネチャを追加できます。
パフォーマンス最適化のため、著者はコンパイル済み正規表現にLRUキャッシュを使用し、ReDoSによるハングアップのリスクを排除し、高信頼度マッチでのアーリーリターンを持つ12時間 результатキャッシュを使用しています。
テストは組み込みのnode:testランナーで書かれており、外部依存関係は不要です。1つのコマンドで構文チェックとテストを実行できます:
npm run verify
どんなタスクに役立つか
まず第一に、この拡張機能はクローラー開発者とデータアナリストの時間節約になります。難読化されたコードとネットワークログを手動で掘り下げる代わりに、数秒で正確にどの保護技術と格闘しているのか、ページがどの環境シグネチャをチェックしているかを理解できます。
2番目のシナリオは、独自の保護の監査です。本番環境でWAFやBot対策モジュールを設定している場合、拡張機能は外部の観測者があなたのルールを見ることができるか、チャレンジが正しく動作しているかを明確に示します。
最後に、Manifest V3の動作方法、MAINとISOLATEDコンテキスト間の安全なデータ転送、パッシブフィンガープリント手法について学びたい人にとって、これは優れた学習材料です。このプロジェクトはNPOSL-3.0でライセンス供与されており、Chrome Web Storeで入手可能です。
関連プロジェクト