reCAPTCHAを実装するBot攻撃による大量申し込みを受けてreCAPTCHAを導入することになったのでその手順を記します。reCAPTCHAの実装方法がよく分からない..という方は参考になるかもしれません。v2とv3がありますが、なるべくユーザーによる申し込みを弾かないように、かつ最低限のBot対策はできるようにしたかったので、v2の非表示バージョンで実装をしました。v2のチェックボックスやv3の方法は今回扱っていません。PHPでも同じように実装できるかと思います。環境はLAMPを想定しています。管理画面での設定まずはサイトごとのAPIキーを発行しないといけないので管理画面で設定していきます。reCAPTCHAのサイトへアクセス。「ラベル」は好きな名前で大丈夫です。「ユーザーの負担が最小」である1段階のレベルで設定をすることに決めました。上記で確定すると、APIのサイトキー・シークレットキーが発行されます。次に、Laravel上で設定作業を行っていきます。JSタグの設置まずAPIのJSファイルを読み込みます。テンプレートファイルの<head>内に挿入。</body></html>フロント側のタグ・スクリプト設定configを設定APIキーはバージョン管理しないほうがよいので.envで設定します。APP_RECAPTCHA_SITE_KEYは先ほど管理画面で発行したサイトのキー、APP_RECAPTCHA_SECRET_KEYは先ほど発行したシークレットキーです。APP_RECAPTCHA_SECRET_KEY=your_secret_key設定したファイルを読み込みます。APIのエンドポイントもここに設定しておきます。],];reCAPTCHAレンダリング対象となるdivタグ設置reCAPTCHAのレンダリングに必要となるので設定します。data-sitekey属性にサイトキー、data-callback属性にsubmit時のコールバック関数が入ります。</body></html>reCAPTCHAを呼び出すためのAPI設定コールバック関数をグローバルで定義しておきます。自分の場合はJSによるバリデーションをかけていて、reCAPTCHAのAPIを発火させるタイミングは「submitボタンが押されたとき」ではなく「バリデーションが通ったとき」にしたいので、reCAPTCHAにより提供されているgrecaptcha.execute()関数を使用して、任意のタイミングでreCAPTCHAを実行させます。・・・});ここまででフロント側の設定は完了です。ローカル環境で見てみると右下にreCAPTCHAのアイコンが出ているかと思います。自動入力などを行うと画像認証画面が出てきて引っかかるようになります。バックエンド側のreCAPTCHA認証実装クライアント側だけですと不正に突破される可能性もあるので、バックエンド側でも認証のチェックを行います。簡単に言いますとクライアント側でreCAPTCHAのAPIが発火した時点でトークンが発行され、フォームのsubmit時にg-recaptcha-responseというキーでトークンがPOSTされるので、そのトークンをバックエンド側でチェックします。ミドルウェア作成いろいろ方法はありますが、今回はミドルウェアを利用します。curlを使っていますがGuzzleなどのライブラリを使用してもいいかと思います。発行したシークレットキー・クライアント側で発行されたトークン・IPアドレスをもとに、不正なsubmitでないかをチェックします。APIについて詳しく知りたい方は公式のドキュメント参照してみてください。}}ここからはLaravelだけの話なので、他のフレームワークでしたら飛ばしてオッケーです。];申し込みフォームのルーティングにミドルウェアを割り当てます。->middleware('recaptcha');これでreCAPTCHAの認証設定は完了です。補足:ログを出力する設定バックエンドでAPI認証する際に、レスポンスの内容を出力したいということがあるかもしれません。自分の場合は下記のようにログ出力の設定を行いました。認証エラーが発生した場合ステータスコードと、エラー内容が分かるのでデバッグがやりやすくなるかと思います。!今回はv2非表示のセキュリティレベル1で設定しましたが、Selenium製ロボットも弾いてくれますし、ユーザーが申し込みできないといったことも今のところはありません。比較的簡単な実装でBot対策できますので、是非やってみてください。※参考ページhttps://developers.google.com/recaptcha/docs/invisible日本語版が無かったので今回まとめてみました。環境整備やツールの検証導入を行ってます。upLoginユーザーは見つかりませんでした。