問い合わせフォームへのスパム投稿が多くて…
と困っていた私は、Apacheの設定で無理やり解決させていましたが、天下のGoogleさんにお世話になれば単純設定だけで解消できたのでした。
- 問い合わせフォームへのスパム投稿が多い
- 「SiteGuard WP Pligin」じゃ、「Contact Form 7」に画像認証入れれない
と悩んでいる方、Googleさんの「リキャプチャ(reCAPTCHA)」というものでちょっと設定するだけで、簡単に解消してくれます。では、その「リキャプチャ(reCAPTCHA)」についての簡単な説明と、使い方について説明します。
Google reCAPTCHA について
フォームへデータ入力しているのが、人間かロボットかを判定し、ロボットの場合にブロックする機能を提供しているサービスです。
スパム投稿の多くは、人間がPCでサイトを訪れて入力しているのではなく、ロボット(人に作られたプログラミング)が自動で世界中にアクセスして入力しているケースがほとんどです。よって、人間の動きができていないアクセスをブロックすれば、おのずとスパム投稿が減ることになります。
「Google reCAPTCHA」は、現在まで、v1,v2,v3と進化してきています。
v1は歪んだ文字列を、サイト閲覧者が読み取って入力するもの。
v2は「ロボットじゃない証明のチェック」+「画像選択」を行うもの。
そして最新のv3は、「サイト閲覧者は何もしなくていい」!!
v2までは、サイト閲覧者側が何か追加の操作をしなくてはいけなかったんですが、v3では何もしなくてよいので、ストレスを与えません。どのような仕組みかの詳細は下記のサイトがわかりやすいです。
Google reCAPTCHA 設定
早速、設定方法について解説します。
ログイン
Googleアカウントでログインしてください。
下図の「v3 Admin Console」を開きます。
必要項目の入力
後から編集できるので、入力ミスがあっても大丈夫です。
- ラベル:任意の名前
- reCAPTHAタイプ:reCAPTCHA v3
- ドメイン:設定したいサイト
- オーナー:メールアドレス
- reCAPTCHA 利用条件に同意する:✅
- アラートをオーナーに送信する:好みに合わせて
これだけで完了です。
キーのコピー
後から再確認できるので、閉じても大丈夫です。
「サイトキー」「シークレットキー」それぞれをコピーしてください。
Contact Form 7(wordpress) 設定
「お問い合わせ」の中の インテグレーション の reCAPTCHA にさきほどコピーしたサイトキーとシークレットキーを入力し、保存すれば完了です。
設定完了の確認
サイトの右下にこのマークが出てればOKです。(カーソルを当てないと青い部分は隠れてます。)
設定だけで満足する勿れ
「reCAPTCHA」のロゴは残念なことに、「Contact Form 7」のページだけで無く、全部のページで表示されます。うっとしいことに、トップへスクロールするボタンと被ったりします。なので、問い合わせページ以外では表示させたくないという人向けへの設定方法です。
「functions.php」に以下のような記述を追加してください。
add_action( 'wp_enqueue_scripts', function() {
// contact-fromを該当ページのパーマリンクに変更 //
if(is_page('contact-from')) return;
wp_deregister_script( 'google-recaptcha' );
}, 100, 0);
[外観]-[テーマエディタ]から操作可能ですが、function.phpを操作する場合は必ずバックアップを取得してください。また、wordpressの管理画面から編集する際に、下記のようなエラーが出た場合
wordpressの構成にもよりますが、下記で対応可能な場合もあるので、参考にしてください。
オマケ)Apache+GeoIPで問い合わせページを制限してみた
ここからは、独り言。
ISP事業でユーザーホームページの運用等をしているが、スパム投稿は海外から行われていることがほとんど。おそらくはセキュリティが甘く踏み台サーバにされているのだろう。その点、日本はしっかりしてる企業が多いのか、あまり見かけない。ただ、さくらのレンタルサーバは、乗っ取られているのかどうかは不明だが、スパムメールを送信したりと、あまりよろしくないイメージはある。
ということで、日本のネットワーク環境で良かったー!を前提に、日本のIP以外を問い合わせページにおいて、ブロックしてみた。
ブロックの仕方はApache+GeoIP(IPで国などを判定するためのデータベースのようなもの)でJP以外をdenyする感じ。インストール手順などは割愛するが、設定はこんな感じ。
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
<LocationMatch /contact/>
SetEnvIf GEOIP_COUNTRY_CODE JP AllowCountry
Require all denied
Require env AllowCountry
</LocationMatch>
実際にこの環境で1年ぐらい運用した結果、問い合わせページへのスパム投稿は0件。効果は絶大だった。ただし、想定はしていたが、GoogleSearchConsoleでは「403エラーページ」と、こうなる。そりゃ、GoogleBOT君のIPは日本じゃないでしょうから。。。Adsense広告の申請が通った後だと、影響は無かったが、申請が通る前にコレをやることはオススメしないので、ご注意を。