Facet Bot Blocker

ファセット検索パラメータを過剰に探索するボットリクエストをブロックし、サイトのパフォーマンスとSEOを保護します。

facet_bot_blocker
522 sites
20
drupal.org

インストール

Drupal 11, 10 v1.0.2
composer require 'drupal/facet_bot_blocker:^1.0'

概要

Facet Bot Blockerモジュールは、ファセット検索機能を悪用する悪意のあるボットやクローラーからDrupalサイトを保護します。ボットがファセットパラメータのより深い階層を継続的にリクエストする場合(例:?f[0]=color:red&f[1]=size:large&f[2]=brand:example)、サイトのパフォーマンスが著しく低下し、過剰にインデックスされたURLによるSEO問題が発生する可能性があります。

このモジュールは、イベントサブスクライバを通じてDrupalのブートストラッププロセスの早い段階でHTTPリクエストをインターセプトします。リクエストに設定された制限を超えるファセットパラメータが含まれている場合、モジュールはカスタマイズ可能なメッセージとともに403 Forbiddenまたは410 Goneレスポンスを即座に返し、リクエストがサーバーリソースを消費するのを防ぎます。

高トラフィックサイトの場合、このモジュールはオプションでMemcacheまたはRedisと統合し、設定とトラッキングメトリクスをデータベースではなくメモリに保存することで、ボット攻撃時でも最小限のパフォーマンスオーバーヘッドを確保します。

Features

  • 設定可能な制限を超えるファセットクエリパラメータ(f[])を含むHTTPリクエストをブロック
  • ブロックされたリクエストに対してHTTP 410 GoneまたはHTTP 403 Forbiddenレスポンスコードを選択可能
  • ブロックされたリクエスト元に表示されるカスタマイズ可能なHTMLメッセージ
  • ブロック/許可されたリクエスト数、ブロック率、最後にブロックされたリクエストの詳細(IP、パス、ユーザーエージェント)を含むリアルタイムメトリクスダッシュボード
  • 認証済みユーザーまたは特定のロールがブロックをバイパスできるパーミッション
  • MemcacheまたはRedisモジュールがインストールされている場合、高トラフィック環境でのパフォーマンス向上のために設定値を自動的にキャッシュ
  • 早期リクエストインターセプションのための優先度101の軽量イベントサブスクライバ

Use Cases

検索が多いEコマースサイトの保護

広範な商品カタログを持つEコマースサイトでは、複数の属性(色、サイズ、ブランド、価格帯など)でフィルタリングできるファセット検索を実装していることがよくあります。ボットはすべての可能なフィルター値を体系的に組み合わせることでこれを悪用し、何百万ものURLを生成する可能性があります。このモジュールは、単一のリクエストに含めることができる同時フィルターパラメータの数を制限することで、このような悪用を防ぎます。

ボットが生成したURLによるSEO汚染の軽減

ボットが多くのファセットの組み合わせでリクエストを作成すると、これらのURLが検索エンジンにインデックスされ、低品質または重複コンテンツページでサイトのSEO価値が薄まる可能性があります。410 Goneレスポンスオプションを使用すると、これらのURLをインデックスから削除するよう検索エンジンに通知できます。

アグレッシブなクローラーによるサーバー負荷の軽減

ファセット検索ページへのアグレッシブなボットクロールは、各リクエストが結果をフィルタリングするためのデータベースクエリをトリガーする可能性があるため、大量のサーバーリソースを消費する可能性があります。イベントサブスクライバレベル(Drupalが完全にブートストラップする前)でリクエストをブロックすることで、このモジュールは悪意のあるトラフィックからのリソース消費を最小限に抑えます。

Solr/Elasticsearchバックエンドの過負荷からの保護

Search APIをSolrまたはElasticsearchバックエンドで使用しているサイトでは、ボットが過剰なファセットクエリを行うと検索サービスの過負荷が発生する可能性があります。このモジュールは、リクエストサイクルの早い段階でブロックすることで、それらのクエリが検索バックエンドに到達するのを防ぎます。

Tips

  • 控えめなファセット制限(例:2〜3)から始めて、ダッシュボードを監視してブロックされているリクエストの数を確認してください。結果に基づいて制限を調整してください。
  • SEOが懸念される場合は、HTTP 410 Goneレスポンスコードを使用してください。これにより、ボットが生成したURLを403 Forbiddenよりも早くインデックスから削除するよう検索エンジンに促します。
  • 深いファセットフィルタリングを正当に使用する必要がある可能性がある認証済みユーザーまたは編集者ロールに「bypass facet bot blocker」パーミッションを付与してください。
  • 本番サイトにはMemcacheまたはRedisをインストールして、メトリクスダッシュボードの完全な利点を得て、モジュール全体のパフォーマンスを向上させてください。
  • ダッシュボードの「最後にブロックされたUser Agent」を確認して、ファセット検索ページを最もアグレッシブにクロールしている特定のボットを特定してください。
  • 包括的な保護のために、このモジュールをレート制限やCAPTCHAなどの他のボット保護対策と組み合わせることを検討してください。

Technical Details

Admin Pages 2
Facet Bot Blocker設定 /admin/config/system/facet-bot-blocker

ファセットパラメータの制限しきい値、ブロックされたリクエストに対するHTTPレスポンスコード、ブロックされたユーザーに表示されるカスタムHTMLメッセージなど、モジュールのブロック動作を設定します。

Facet Bot Blockerダッシュボード /admin/reports/facet-bot-blocker

ブロックおよび許可されたファセット検索リクエストに関するリアルタイムの統計とメトリクスを表示します。このダッシュボードは、モジュールが過剰なボットクロールからサイトをどの程度効果的に保護しているかを可視化します。

権限 3
Facet Bot Blocker設定の管理

ファセット制限、レスポンスコード、ブロックメッセージなど、Facet Bot Blockerモジュールの設定を変更することを許可します。このパーミッションは制限付きであり、信頼できる管理者にのみ付与する必要があります。

Facet Bot Blockerダッシュボードへのアクセス

ブロックおよび許可されたリクエストの統計を表示するダッシュボードレポートページの閲覧を許可します。

Facet Bot Blockerのブロックをバイパス

ブロックメカニズムを完全にバイパスすることを許可します。このパーミッションを持つユーザーからのリクエストは、含まれるファセットパラメータの数に関係なくブロックされません。深いファセットフィルタリングを正当に使用する可能性がある認証済みの編集者や管理者に便利です。

Troubleshooting 4
モジュールが有効になっていても、ダッシュボードにブロック/許可されたリクエストが0と表示される

メトリクストラッキングにはMemcacheまたはRedisモジュールのインストールが必要です。これらのモジュールがない場合、ダッシュボードはページロード間でリクエストカウンターを保持できません。メトリクストラッキングを有効にするには、drupal/memcacheまたはdrupal/redisモジュールをインストールしてください。

正当なユーザーがファセット検索を使用するとブロックされる

モジュール設定でファセットパラメータの制限を増やしてください。サイトの正当なファセット検索の使用状況を分析して、ユーザーが通常同時に適用するファセットフィルターの最大数を把握し、その数よりわずかに高く制限を設定してください。

ブロックされたリクエストがまだサーバーアクセスログに表示される

これは想定される動作です。モジュールは、Webサーバーがリクエストをログに記録した後、Drupalが完全に処理する前にリクエストをブロックします。モジュールはデータベースクエリとコンテンツレンダリングを防ぎますが、最初のHTTP接続は防ぎません。

設定変更がすぐに反映されない

MemcacheまたはRedisを使用している場合、設定値がキャッシュされます。設定変更後にDrupalキャッシュをクリア(drush cr)して、新しい値が使用されるようにしてください。

Security Notes 3
  • 「administer facet bot blocker」パーミッションは制限付きとしてマークされており、セキュリティに関連するブロック動作を制御するため、信頼できる管理者にのみ付与する必要があります。
  • カスタムブロックメッセージフィールドはHTMLコンテンツを受け入れます。XSS脆弱性を防ぐため、信頼できる管理者のみがこの設定を変更できるようにしてください。
  • モジュールはブロックされたIPアドレスをキャッシュに記録します。この情報を長期間保存する場合は、データ保持ポリシーに注意してください。