CAPTCHA
Webフォームを自動スパム送信から保護するためのCAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)機能を提供します。
captcha
インストール
composer require 'drupal/captcha:^2.0'
概要
CAPTCHAモジュールは、Drupalフォームにチャレンジ・レスポンステストを追加する包括的なスパム保護システムです。他のモジュールがさまざまなCAPTCHAタイプを実装できるAPIを提供し、組み込みのMath CAPTCHAチャレンジが含まれています。
CAPTCHAチャレンジは、「CAPTCHA Points」という概念を通じて、事実上すべてのDrupalフォームに追加できます。これはフォームを特定のチャレンジタイプに関連付ける設定エンティティです。このモジュールには、ユーザーログイン、登録、パスワードリセットなどの一般的なフォーム用に事前設定されたCAPTCHA Pointsが含まれています。
主な機能には、信頼できるアドレスのチャレンジをバイパスするIPホワイトリスト、成功した応答後にCAPTCHAをスキップする設定可能な永続化設定、簡単なセットアップのための管理モード、ブロックされた送信の統計追跡が含まれます。このモジュールはDrupalのページキャッシュシステムと統合され、CAPTCHAチャレンジのあるページのキャッシュを自動的に無効化します。
開発者はhook_captcha()を実装してカスタムCAPTCHAタイプを作成でき、hook_captcha_placement_map()を使用してフォーム内のCAPTCHAの配置をカスタマイズできます。
Features
- Math CAPTCHAチャレンジ - ユーザーが解く必要がある簡単な算術問題(例:5 + 3 = ?)を表示
- CAPTCHA Pointsシステム - フォームIDをチャレンジタイプにマッピングし、有効/無効状態を持つ設定エンティティ
- グローバルCAPTCHAモード - サイト全体のすべてのフォームにチャレンジをオプションで追加
- IPアドレスホワイトリスト - 信頼できるIPアドレスまたはIP範囲のCAPTCHAをスキップ
- 永続化設定 - CAPTCHAを常に表示するか、成功した応答後にスキップするかを設定(フォームごと、フォームタイプごと、またはサイト全体)
- 管理モード - 管理者向けにフォーム上にCAPTCHA管理リンクを表示
- カスタマイズ可能なメッセージ - CAPTCHAのタイトル、説明、エラーメッセージを設定
- 大文字小文字を区別するまたは区別しない検証オプション
- 統計追跡 - ステータスレポートでブロックされたフォーム送信をカウント
- 誤った応答のログ記録 - 不正なCAPTCHA応答をオプションでログに記録
- cronによる自動クリーンアップを伴うCAPTCHAセッション管理
- Drupalのページキャッシュとの統合(CAPTCHAのあるページのキャッシュを無効化)
- プログラムによるCAPTCHA挿入のためのフォーム要素(#type => 'captcha')
- Drupal 7からの移行サポート
- カスタムCAPTCHA実装のためのフックを備えた開発者API
Use Cases
スパムボットからのユーザー登録の保護
user_register_formのCAPTCHA Pointを有効にして、訪問者がアカウントを作成する前にMathまたはImage CAPTCHAを解くことを要求します。これにより、正当な訪問者の合理的なユーザー体験を維持しながら、スパムボットによる自動アカウント作成を効果的にブロックします。
お問い合わせフォームの保護
お問い合わせフォームにCAPTCHAを追加して、自動スパムメッセージを防ぎます。モジュールには個人用お問い合わせフォーム用に事前設定されたCAPTCHA Pointが含まれており、サイト全体またはカスタムお問い合わせフォーム用に追加のポイントを追加できます。
コメントフォームの保護
コメントフォーム(comment_*_form)用のCAPTCHA Pointsを作成してスパムコメントを防ぎます。正当なコメント投稿者のユーザー体験を向上させるために、1回成功した応答後にCAPTCHAをスキップする永続化設定の使用を検討してください。
IPホワイトリストを使用したサイト全体の保護
最大限の保護のために「すべてのフォームにCAPTCHAチャレンジを追加」を有効にし、オフィスのIPアドレスや信頼できるパートナーのIPをホワイトリストに追加して、内部ユーザーにはCAPTCHAが表示されないようにします。
カスタムフォームの保護
form_idを指定して任意のフォーム用のカスタムCAPTCHA Pointsを作成します。フォームIDは管理モードを有効にすることで見つけられ、すべてのフォームにform_idを表示するCAPTCHA管理リンクが表示されます。
カスタムCAPTCHAタイプの実装
開発者はhook_captcha()を実装してカスタムCAPTCHAチャレンジを作成できます。'list'操作で利用可能なタイプを返し、'generate'操作でチャレンジを生成します。これにより、サードパーティのCAPTCHAサービスやカスタムチャレンジタイプとの統合が可能になります。
Tips
- 管理者や信頼できるロールに「Skip CAPTCHA」権限を付与して、チャレンジが表示されないようにしてください
- サイト構築中は管理モードを使用して、フォームIDを簡単に識別し、CAPTCHA Pointsを管理してください
- コメントフォームでは、キャッシュ効率を向上させるためにコンテンツタイプ設定で「別のページに表示」を設定してください
- 開発環境では、settings.phpに$settings['disable_captcha'] = TRUE;を追加してすべてのCAPTCHAをバイパスしてください
- 永続化設定は慎重に検討してください。「一度成功したらスキップ」はUXを改善しますが、セキュリティは低下します
- 既知の良好なIP(オフィス、CIサーバー)にはIPホワイトリストを使用してCAPTCHAをバイパスしてください
- 統計が有効な場合は、ブロックされた送信の統計のステータスレポートを監視してください
- 重要なフォーム構造の変更後はCAPTCHA配置キャッシュをクリアしてください
Technical Details
Admin Pages 4
/admin/config/people/captcha
デフォルトのチャレンジタイプ、グローバルオプション、永続化動作、メッセージのカスタマイズを含むCAPTCHAモジュール設定のメイン設定ページ。
/admin/config/people/captcha/captcha-points
CAPTCHA Points(フォームとCAPTCHAチャレンジタイプの関連付け)を管理します。フォームID、チャレンジタイプ、有効状態を持つすべての設定済みCAPTCHA Pointsを一覧表示します。
/admin/config/people/captcha/captcha-points/add
特定のフォームをチャレンジで保護するための新しいCAPTCHA Pointを作成します。
/admin/config/people/captcha/examples
利用可能なすべてのCAPTCHAチャレンジタイプの例を現在の設定で表示するプレビューページ。異なるCAPTCHA実装のテストと比較に便利です。
権限 2
Hooks 3
hook_captcha
CAPTCHAチャレンジタイプを実装するためのメインフック。モジュールはこれを実装して独自のチャレンジを提供します。
hook_captcha_alter
モジュールが生成後にCAPTCHAを変更できるようにします。
hook_captcha_placement_map
特定のフォームでCAPTCHA要素のカスタム配置位置を定義します。
Troubleshooting 4
これは通常、積極的なキャッシュで発生します。CAPTCHAモジュールはCAPTCHAのあるページのページキャッシュを無効にしますが、他のキャッシュメカニズム(Varnish、CDN)が問題を引き起こす可能性があります。CAPTCHAのあるフォームのキャッシュをバイパスするようにキャッシュレイヤーを設定するか、reCAPTCHAのようなキャッシュ可能なCAPTCHAタイプの使用を検討してください。
1. ユーザーが「Skip CAPTCHA」権限を持っていないことを確認します。2. CAPTCHA Pointが存在し、有効になっていることを確認します。3. CAPTCHA配置キャッシュをクリアします。4. IPがホワイトリストに登録されていないか確認します。
設定ページからCAPTCHA配置キャッシュをクリアします。問題が続く場合は、hook_captcha_placement_map()を実装して、そのフォームの正確な配置を指定します。
CAPTCHAはチャレンジのあるフォームのページキャッシュを無効にします。キャッシュが必要な場合は、CAPTCHA保護されたフォームを別のページに配置するか、AJAXフォームローディングを使用するか、reCAPTCHAのようなキャッシュ可能なCAPTCHA実装を使用してください。
Security Notes 6
- CAPTCHAは自動攻撃からの保護を提供しますが、決意の固い攻撃者はCAPTCHA解決サービスを使用する可能性があります
- Math CAPTCHAは画像ベースのCAPTCHAよりもセキュリティは低いですが、よりアクセシブルです
- 常にCAPTCHAをハニーポットやレート制限などの他のセキュリティ対策と組み合わせてください
- CAPTCHAセッションIDは再利用攻撃を防ぐためにトークンで検証されます
- ホワイトリストに登録されたIPはすべてのCAPTCHA検証をバイパスします。この機能は慎重に使用してください
- モジュールはセキュリティ監視のためにCAPTCHAセッション再利用攻撃をログに記録します