reCAPTCHA
Google reCAPTCHAサービスをDrupalのCAPTCHAモジュールと統合し、フォームをスパムや不正利用から保護します。
recaptcha
インストール
composer require 'drupal/recaptcha:8.x-3.4'
composer require 'drupal/recaptcha:8.x-3.2'
概要
reCAPTCHAモジュールは、GoogleのreCAPTCHAウェブサービスとの統合を提供し、Drupalフォームに高度なボット対策機能をもたらします。Google No CAPTCHA reCAPTCHA API(reCAPTCHA v2)を使用し、高度なリスク分析エンジンと適応型CAPTCHAにより、人間のユーザーと自動化ソフトウェアを区別します。
このモジュールはCAPTCHAモジュールを拡張し、CAPTCHAタイプのオプションとしてreCAPTCHAを提供します。GoogleからサイトキーとシークレットキーをA取得して設定すると、管理者はCAPTCHAモジュールで管理される任意のフォーム(ユーザーログイン、登録、パスワードリセット、お問い合わせフォームなど)にreCAPTCHA保護を割り当てることができます。
このモジュールは、複数のウィジェットテーマ(ライトとダーク)、CAPTCHAタイプ(アクセシビリティのための画像と音声)、様々なサイズ(通常とコンパクト)をサポートし、JavaScriptが無効なブラウザ向けのフォールバック機能も備えています。Googleサービスが制限されている地域では、代替のreCAPTCHAエンドポイント(google.comの代わりにrecaptcha.net)を使用するグローバルモードを提供しています。
Features
- 高度なリスク分析機能を備えたGoogle reCAPTCHA v2(No CAPTCHA reCAPTCHA)統合
- 視覚的なカスタマイズのための設定可能なウィジェットテーマ(ライト/ダーク)
- アクセシビリティ準拠のための画像および音声CAPTCHAタイプのサポート
- 異なるフォームレイアウトに対応する通常サイズとコンパクトサイズのウィジェット
- noscript要素によるJavaScript無効ブラウザのフォールバックサポート
- google.comにアクセスできない地域向けのグローバルモード(recaptcha.netを使用)
- Google設定でドメイン検証が無効な場合のセキュリティ強化のためのホスト名検証オプション
- reCAPTCHAキーが設定されていない場合の数式CAPTCHAへの自動フォールバック
- 自動言語検出による多言語サポート
- Drupalのキャッシュシステムとの完全な互換性 - キャッシュ可能なCAPTCHAフォーム
- Drupal 6およびDrupal 7からの移行サポート
- CAPTCHAモジュールのフォーム保護システムとのシームレスな統合
Use Cases
ブルートフォース攻撃からのユーザーログインフォームの保護
ユーザーログインフォームでreCAPTCHAを有効にして、自動化されたブルートフォースパスワード攻撃を防止します。CAPTCHA設定に移動し、'user_login_form'のCAPTCHAポイントを追加して、チャレンジタイプとして「reCAPTCHA」を選択します。これにより、正当なユーザーには最小限の負担でログインを許可しながら、自動化されたログイン試行を検出してブロックするGoogleのリスク分析が追加されます。
お問い合わせフォームでのスパム防止
お問い合わせフォームにreCAPTCHA保護を適用して、ボットからのスパム送信をブロックします。お問い合わせフォームのCAPTCHAポイントを設定し、reCAPTCHAを割り当てます。不可視のリスク分析が疑わしい送信にチャレンジし、ほとんどの正当なユーザーはCAPTCHAチャレンジを見ることなく通過します。
ユーザー登録のセキュリティ確保
reCAPTCHAを有効にして、ユーザー登録フォームを自動アカウント作成から保護します。これにより、スパム、不正利用、またはクレデンシャルスタッフィング攻撃に使用される可能性のある偽アカウントをボットが作成することを防ぎます。
アクセシビリティに配慮したCAPTCHA実装
音声CAPTCHAタイプオプションを使用して、視覚障害のあるユーザーにアクセシブルな代替手段を提供します。ウィジェット設定で音声チャレンジを有効にするように構成し、スパム保護を維持しながらアクセシビリティ要件への準拠を確保します。
中国または制限された地域でのデプロイ
google.comがブロックされている地域(中国など)でユーザーにサービスを提供するサイトでは、「reCAPTCHAをグローバルに使用」オプションを有効にします。これにより、すべてのreCAPTCHAリクエストがrecaptcha.netドメインを使用するように切り替わり、これらの地域でアクセス可能でありながら同じ保護を提供します。
テーマ選択によるサイトデザインとのマッチング
サイトの視覚デザインに合わせてライトまたはダークのreCAPTCHAテーマを選択します。ダークテーマのサイトでは、「ダーク」テーマオプションを選択して、CAPTCHAウィジェットがデザインの美観とシームレスに調和するようにします。
Tips
- キャッシュされた状態を避けるため、常にシークレット/プライベートブラウザウィンドウでreCAPTCHA設定をテストしてください
- サイドバーや狭いレイアウトでスペースが限られているフォームには「コンパクト」サイズオプションを使用してください
- noscriptフォールバックは、JavaScriptが無効なユーザーをサポートする必要がある場合にのみ有効にしてください - 追加のマークアップが追加されます
- ダークテーマはダークモードが有効なサイトでうまく機能しますが、明るい背景では不調和に見える場合があります
- スコアの問題を避けるため、開発環境と本番環境で別々のreCAPTCHAキーを登録してください
- Google reCAPTCHA管理コンソールでトラフィックパターンを監視し、高い失敗率が見られる場合は設定を調整してください
- 他のモジュールで利用可能な場合は、不可視保護のためにreCAPTCHA v3の使用を検討してください
Technical Details
Admin Pages 1
/admin/config/people/captcha/recaptcha
DrupalサイトのGoogle reCAPTCHA設定を構成します。このページでは、管理者がAPI認証情報を入力し、保護されたフォームに表示されるreCAPTCHAウィジェットの外観と動作をカスタマイズできます。
権限 1
Hooks 4
hook_captcha
CAPTCHAモジュールのhookを実装し、reCAPTCHAをCAPTCHAタイプとして登録し、reCAPTCHAフォーム要素を生成します。'list'操作では利用可能なCAPTCHAタイプのリストを返し、'generate'操作ではバリデーションコールバック付きの完全なreCAPTCHAウィジェットを構築します。
hook_theme
JavaScriptが無効な場合のnoscriptフォールバックコンテンツをレンダリングするためのrecaptcha_widget_noscriptテーマフックを登録します。
hook_library_info_build
有効な各言語のライブラリ定義を動的に構築します。言語固有のURLでGoogleのreCAPTCHA APIを指す外部JavaScriptライブラリを作成します。'use_globally'設定に基づいてgoogle.comまたはrecaptcha.netドメインを使用します。
hook_help
reCAPTCHAモジュールの目的、機能、段階的な設定手順を説明するヘルプページのコンテンツを提供します。
Troubleshooting 7
サイトキーとシークレットキーの両方がreCAPTCHA設定で正しく構成されていることを確認してください。ブラウザコンソールでJavaScriptエラーを確認してください。CAPTCHAモジュールで特定のフォームにreCAPTCHAが割り当てられていることを確認してください。設定変更後はすべてのキャッシュをクリアしてください。
これはサイトキーまたはシークレットキーが空または無効な場合に発生します。reCAPTCHA設定に移動し、GoogleのreCAPTCHA管理コンソールから取得した有効なAPI認証情報を入力してください。
リクエストを行っているドメインがGoogle reCAPTCHA設定で登録されているドメインと一致しません。Google reCAPTCHA設定にドメインを追加するか、Google設定で「reCAPTCHAソリューションの発信元を確認する」が無効になっている場合はモジュール設定で「ローカルドメイン名検証」を有効にしてください。
サーバーがgoogle.com(またはグローバルモード使用時はrecaptcha.net)へのアウトバウンドHTTPS接続を行えることを確認してください。サーバーはGoogleの検証エンドポイントと通信する必要があります。ファイアウォールルールとプロキシ設定を確認してください。
サーバーのCA証明書バンドルが古く、GoogleのSSL証明書を検証できない可能性があります。サーバーのCA証明書を更新するか、PHP/cURLを更新された証明書バンドルを使用するように構成してください。
reCAPTCHA設定で「reCAPTCHAをグローバルに使用」チェックボックスを有効にしてください。これにより、APIエンドポイントがwww.google.comからwww.recaptcha.netに切り替わり、制限された地域でアクセス可能になります。
モジュールにはAJAXフォーム用のreCAPTCHA再レンダリングを処理するJavaScriptが含まれています。recaptcha/recaptchaライブラリが適切にアタッチされていることを確認してください。このビヘイビアは既に処理された要素のCAPTCHAウィジェットをリセットします。
Security Notes 6
- シークレットキーをクライアント側のコードや公開リポジトリに公開しないでください - サーバー側でのみ使用する必要があります
- Google設定で「reCAPTCHAソリューションの発信元を確認する」が無効な場合は、「ローカルドメイン名検証」を有効にして、キーの盗難や未承認ドメインでの使用を防止してください
- reCAPTCHAキーはドメイン固有です - 本番キーがwwwありとなしの両方を含むすべてのドメインで登録されていることを確認してください
- モジュールはGoogleのAPIを使用してサーバー側で応答を検証します - クライアント側の検証だけでは不十分です
- 初期セットアップ時には詳細ログを有効にして、検証の失敗とその原因を監視することを検討してください
- キーが設定されていない場合の数式CAPTCHAへのフォールバックにより、reCAPTCHA設定が不完全でもフォームは保護された状態を維持します