Antibot

JavaScriptと人間の操作を要求することでロボットによるフォーム送信を防ぐ軽量なスパム対策モジュール。

antibot
67,601 sites
164
drupal.org

インストール

Drupal 11, 10, 9, 8 v2.0.4
composer require 'drupal/antibot:^2.0'

概要

Antibotは、革新的な方法でウェブサイト上のロボットによるフォーム送信を排除するために設計された、非常に軽量なモジュールです。このモジュールは完全にバックグラウンドで動作し、エンドユーザーによる操作を一切必要としません。

保護メカニズムは、フォームのアクションを無効なパスに変更し、隠しキーフィールドを挿入することで機能します。JavaScriptが人間らしい動作(マウスの移動、タッチイベント、TabまたはEnterキーの押下)を検知すると、元のフォームアクションを復元し、正しいキー値を設定します。JavaScriptが有効でない場合、または人間らしい動作が検出されない場合、フォーム送信は失敗します。

エンドユーザーに必要な唯一の条件は、JavaScriptが有効になっていることです。無効な場合、保護されたフォームには、フォームを使用するにはJavaScriptが必要である旨のメッセージが表示されます。

Features

  • ユーザー操作を必要としない透明なスパム対策保護(CAPTCHAなし)
  • マウスの動き、タッチジェスチャー、またはキーボードナビゲーション(Tab/Enter)による人間の動作を検出
  • ボットの送信を無効なページ(/antibot)にリダイレクトしてフォームを保護
  • フォームIDマッチングのワイルドカードパターンをサポート(例:comment_*ですべてのコメントフォームを保護)
  • ワイルドカードにマッチした場合でも、特定のフォームを保護から除外する機能
  • ページ上のフォームIDとその保護状態を表示するデバッグモード
  • 信頼できるユーザーがAntibot保護をスキップできる権限ベースのバイパス
  • 保護設定変更時の適切なキャッシュ無効化
  • 個別のWebform保護設定のためのWebformモジュールとの統合
  • 他のモジュールが保護状態を変更したり、拒否された送信に応答するためのHook

Use Cases

スパムボットからコメントフォームを保護

デフォルトで、Antibotはパターン「comment_*」を使用してすべてのコメントフォームを保護します。JavaScriptを実行しない、または人間の操作をシミュレートしないスパムボットは、コメントの投稿をブロックされます。これにより、ユーザーにCAPTCHAを解かせることなくコメントスパムを減らすことができます。

自動登録に対してユーザー登録を保護

user_register_formはデフォルトで保護されており、ボットによる自動アカウント作成を防止します。これは、オープン登録を許可しているが、大量の偽アカウント作成を防ぎたいサイトに特に有用です。

ユーザーを煩わせずにお問い合わせフォームを保護

お問い合わせフォーム(contact_message_*)はデフォルトで保護されています。CAPTCHAソリューションとは異なり、ユーザーは人間であることを証明する必要がありません。ページ上で自然に操作する(マウスを動かす、キーボードナビゲーションを使用する)だけで十分です。

カスタムフォームの保護

「フォームIDを表示」オプションを一時的に有効にして、サイト上の任意のカスタムフォームのフォームIDを確認します。次に、そのフォームID(またはワイルドカードパターン)を保護フォームリストに追加します。カスタムWebform送信は「webform_submission_*」のようなパターンを使用して保護できます。

信頼できるユーザーに保護のバイパスを許可

信頼できるロール(管理者やコンテンツ編集者など)に「Antibotをスキップ」権限を割り当てることで、Antibotバリデーションなしでフォームを送信できるようになります。これは自動テストや、マウス/キーボードイベントをトリガーしないアクセシビリティツールを使用するユーザーに便利です。

きめ細かいフォーム保護制御

excluded_form_ids設定を使用して、ワイルドカードパターンにマッチした場合でも特定のフォームを保護から除外できます。例えば、「contact_message_*」ですべてのお問い合わせフォームを保護しつつ、除外リストに「contact_message_newsletter」を追加して特定のフォームを除外できます。

Webformモジュールとの統合

Webformモジュールがインストールされている場合、個別のWebformのサードパーティ設定からAntibot保護を有効にできます。モジュールはWebform設定が保存されるときにform_ids設定を自動的に管理します。

Tips

  • ワイルドカードパターン(例:「comment_*」)を使用して、個別にリストする代わりに、単一のエントリで複数の関連フォームを保護できます
  • 「フォームIDを表示」は保護を設定する際にのみ一時的に有効にしてください。本番環境で有効のままにすると、内部のフォームIDが露出する可能性があります
  • 「Antibotをスキップ」権限は、JavaScriptの操作をシミュレートできない自動テスト環境に便利です
  • AntibotはHoneypotなどの他のスパム対策モジュールと組み合わせて、多層防御に使用するとうまく機能します
  • Views exposed formsには特別な処理があり、保護できますが、ユーザー操作前の初回ページ読み込み時にも動作します
  • 保護されたフォームには「antibot」CSSクラスが追加されるため、必要に応じてカスタムスタイリングに使用できます

Technical Details

Admin Pages 1
Antibot設定 /admin/config/user-interface/antibot

Antibotによって保護されるフォームを設定し、フォームIDを識別するためのデバッグモードを有効化します。このページでは、管理者がワイルドカードを使用してフォームIDパターンを指定し、一度に複数のフォームを保護したり、特定のフォームを保護から除外したり、ページ上にフォームIDを表示するデバッグモードを有効にしたりできます。

権限 2
Antibot設定の管理

/admin/config/user-interface/antibotにあるAntibot設定ページへのアクセスを許可します。この権限を持つユーザーは、保護されるフォームを変更し、フォームID表示デバッグモードを有効/無効にできます。この権限は制限付きとしてマークされています。

Antibotをスキップ

この権限を持つユーザーに対して、Antibot保護は完全にバイパスされます。信頼できる管理者や自動テスト目的に便利です。

Hooks 3
hook_antibot_form_status_alter

モジュールが特定のフォームをAntibotで保護すべきかどうかを変更できるようにします。フォームIDが設定されたパターンとマッチした後に呼び出されます。

hook_antibot_reject

フォーム送信の拒否に対応します。Antibotがantibotキーの欠落または無効(ボット動作の検出)によりフォーム送信をブロックしたときに呼び出されます。

hook_antibot_generate_key_alter

フォームバリデーション用に生成された暗号化キーを変更します。モジュールがキー生成プロセスをカスタマイズできるようにします。

Troubleshooting 5
正規のユーザーに対してフォーム送信が「送信失敗」エラーで失敗する

ユーザーのブラウザでJavaScriptが有効になっていることを確認してください。アクセシビリティツールや自動化を使用している場合は、影響を受けるユーザーに「Antibotをスキップ」権限を付与することを検討してください。

カスタムテンプレートを使用したカスタムWebformがAntibotで動作しない

カスタムフォームテンプレートにantibotフィールドを追加してください:{{ element.antibot_no_js }}と{% if element.antibot_key %}{{ element.antibot_key }}{% endif %}。antibot_keyの条件チェックにより、フィールドの重複レンダリングを防ぎます。

Antibot保護にもかかわらず、ボットによってフォームが送信されている

高度なボットの中にはJavaScriptを実行し、マウスイベントをシミュレートできるものがあります。価値の高いフォームには、AntibotをHoneypotやreCAPTCHAなどの他のスパム対策と組み合わせることを検討してください。

保護リストに追加すべきフォームIDがわからない

Antibot設定で「フォームIDを表示」チェックボックスを有効にしてください。その後、フォームを含むページにアクセスすると、フォームIDとその保護状態がメッセージとして表示されます。フォームIDを特定したら、このオプションを無効にすることを忘れないでください。

Antibot設定を変更してもフォームキャッシュが無効化されない

モジュールには適切なキャッシュタグ処理が含まれています。キャッシング問題が発生した場合は、Drush(drush cr)またはパフォーマンス設定ページからすべてのキャッシュをクリアしてみてください。

Security Notes 5
  • antibotキーはサイトのハッシュソルトを使用したDrupalの暗号化HMAC関数を使用して生成されるため、予測攻撃に対して安全です
  • キーはブラウザに送信される前にシャッフルされ、JavaScriptによってアンシャッフルされるため、追加の難読化レイヤーが加わります
  • JavaScriptがないフォームは/antibotエンドポイントにフォールバックし、エラーを表示しますが、機密情報は公開されません
  • プログラムで送信されたフォーム(FormState::setProgrammed()を使用)はAntibotバリデーションをバイパスし、正当な自動フォーム送信を許可します
  • このモジュールはユーザーデータや追跡情報を保存しません。送信時にフォーム送信を検証するだけです