当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

サガワドラゴン大量フォーム投稿対策:cakephpでGoogle reCaptchaを使う。

サガワドラゴン大量フォーム投稿対策:cakephpでGoogle reCaptchaを使う。


お客様でサガワドランゴン名乗るフォーム登録で多数の迷惑メールを短時間で700通弱送るトラブルがあった。この問題のおかげでGoogle G Suite のアカウントが通数制限で送受信できなくなる問題が発生しフォームが使えなくなった。G SuiteやGmailは一日の通数制限があるのでスパマーが大量に送るとアカウントが一時的に送受信が凍結してしまう。但し一日立つと復活します。Gのメールフィルターはあまりよくない。それは、一度受信した上でフィルターをかけるため通数制限の問題に対して解決にならないのだ。

結局cakephpのバージョンが古くて2系であったためCaptchaプラグインが使えなくなっているものや、現代のSpam事情を考慮すると実装上の課題があるものが多いため、改めてGoogleのCaptchaを使うことにした。おそらく下手なcakephpプラグインを使うよりも実装は簡単で効果は高い。本音はWORDPRESSでフォームを作っていれば簡単にGoogle Captcha使えるのにね!と思います。まあ、フレームワークで作る場合は人それぞれの個性が出るので作り方のトレースをある程度行った上で導入が必要になる。 今回の環境はcakephpでしたがおそらくcakephpのどのバージョンでも使えると思う。まあ、参考にしてみてください。GoogleのreCaptchaを使うには予めユーザ登録とドメイン登録が必要。サイトキーやシークレットキーもここで取得します。やり方は過去記事のここを参考にしてみてください.Google reCaptcha

ヘッダに設置

フォームに設置

コントローラに設置

次のコードを適宜書き換えてフォームを表示する部分の処理において内容チェック処理を行う部分もしくはSubmitする直前に挿入してみてください。

特定のヘッダ項目で比較チェック

※メールのヘッダ項目やBODYの内容で特徴あるパターンでトラップさせる。サンクスメールの送信前や確認表示の前に入っているバッファで 文字列比較すると良いと思います。

文字列はUTF-8でエンコーディングという前提です。項目は攻撃を仕掛けられたサイト毎に異なるため、事前に届いている攻撃メールを調べて共通項を調べてみてください。意外とどのメールにも共通した文字列が潜んでいるものです。そこを文字列含む関数比較(preg_match)を使って検出すると良いです。後は問題あるものは適当なページへ飛ばす事です。

タグ: , , , , , ,

GoogleのreCAPTCHAのバージョンがVersion3になってチェックが不要に。


私ごとで恐縮ですが、たまたまフランスからコンタクトフォームからスパム投稿があった。
なんだろう?なぜだろう?と思いながらホームーページを調べていたら設定していたはずのGoogleのreCAPTCHAは効かなくなっている。



どうしてだろう?と思い調べてみるとContactForm7の最新版プラグインはreCAPTCHAのバージョンが上がっており、プラグインを更新した際に 以前のreCAPTCHA(v2)が使えなくなっていた。つまりreCAPTCHA(v3)を使いなさいということです。



どうやら再度、新規登録をGoogleのreCaptcha登録サイトで行わないと利用できない。そこで登録した際の「サイトキー」と 「シークレットキー」が発行されるのでそれをContactForm7に登録しないといけないようになっている。

またGoogleのreCaptcha登録サイトで案内されてるJavascriptの埋め込みコードを自サイトへ2種類登録する必要がある。 コンタクトフォーム7で作成したそれぞれのプロファイルの入力HTMLコードの先頭に埋め込んでおけば良いだろう。下記の様なものを埋め込む。



実は、もう一つ盲点があってContactForm7にGoogleのreCaptchaのチェック画像が以前はあったと思うが、今回のリリースで不要になった。 そのためreCaptcha(v2)で使っていたContactForm7の埋め込みタグは不要になりました。 知らずに、どうやったらreCaptcha(v3)が使えるのか1時間ほど悩んでしまった。そのかわり右下にGooglenoの安全マークアイコンが出るように なりました。

タグ: , , ,