STAFF BLOG
wordpressのContact Form 7でreCAPTCHA(v3)を有効化するとwindowsブラウザでエラーがでる問題
Web制作
wordpressのContact Form 7でreCAPTCHA(v3)を有効化するとwindowsブラウザでエラーがでる問題
目次
Contact Form 7・reCAPTCHAとは?
wordpressにプログラミングの知識がなくてもお問い合わせフォームを作成できるプラグイン「Contact Form 7」は非常に人気で多くのworpressにて利用されているプラグインです。弊社でも多くのサイトで利用していますが、フォームを利用したスパムメールが大量に届き、困っている方も多いのではないでしょうか?
その対策として、Googleが提供している「reCAPTCHA」という対策ツールが有名で、「Contact Form 7」ではこのツールを標準で利用できます。
フォームメールが送信できていない不具合
この「reCAPTCHA」は人間が入力して送信されたものか、BOT(ボット)が送信したものかを判別してくれる賢いツールなのですが、なぜかwindowsのブラウザ(EdgeやChromeで確認)からフォーム送信すると下画像のように「メッセージの送信に失敗しました」というエラーが表示され、メールが届かない事象が発覚いたしました。
※エラーメッセージは「Contact Form 7」の設定により異なる場合があります。
多くの方が同じ問題に遭遇しているのではとおもい、その原因を追求するまでの流れと暫定的な解決策をご紹介いたします。
reCAPTCHA(v3)を疑う
「reCAPTCHA(v3)」を設定していない「Contact Form 7」のフォームでは同様の問題が発生していないため、「reCAPTCHA(v3)」が原因ではないかと疑い「reCAPTCHA(v3)」キーを削除し無効化しました。
この状態で、送信テストをおこなったところ問題なくメール送信ができたので、原因は「reCAPTCHA(v3)」と判明!
- エラーメッセージの枠の色
- エラーメッセージの枠線の色には意味があるようで、赤はメール送信失敗、オレンジはスパム判定を表し、今回は枠線がオレンジ色だったため、このことからもスパムとわかります。
▼公式サイトのFAQ
https://contactform7.com/ja/faq/after-submitting-the-form-i-get-an-error-message/
「reCAPTCHA(v3)」を無効化するとメールは届きましたが、これではまた大量のスパムが届いてしまいます。
「Contact Form 7」プラグインのプログラムソースを解析
「Contact Form 7」の「reCAPTCHA」に関するプログラムの該当部分は、“/wp-content/plugins/contact-form-7/modules/recaptcha.php”です。
「recaptcha.php」を解析すると、下記のように、「reCAPTCHA」から返される判定スコアをもとに、スパムと判断するしきい値を指定している下記の箇所があります。
1 2 3 |
public function get_threshold() { return apply_filters( 'wpcf7_recaptcha_threshold', 0.5 ); } |
「reCAPTCHA」から返される判定スコアは、“0〜1”で0に近いほどスパム扱いになります。その判定スコアを0.5以下は(0.5を含む)の場合にスパム扱いとする設定となっていることがわかりました。
エラーとなるブラウザからのスコアを測定
実際にエラーで送信ができないブラウザからは、どのようなスコアが出ているか確認します。
簡単に「reCAPTCHA」のスコアを測定してくれるサイトがありますので、下記のURLよりアクセスしてください
- 「reCAPTCHA」スコア測定サイト
- https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php
測定すると、下記のような画面が表示され、スコアが表示されます。
通常は0.9や0.7が表示されますが、問題のwindowsでのブラウザ(EdgeやChrome)では、何度か測定すると0.3が表示されました。
つまり「Contact Form 7」はスコアが0.5以下でのスパム判定ですので、この“0.3”というスコアがフォームからメールを送信できない理由でした。
暫定的な解決策
ではなぜwindowsのブラウザでこのようなスコアが出るのかは原因が特定できておりませんが、弊社のwindows機でこのような結果でしたので、多くの訪問者も同様の問題が発生する可能性が高いと考え、「Contact Form 7」のスパム判定のしきい値を、初期設定の「0.5」から「0.29」に変更して様子を見ることにしました。
wordpressのテーマの“/wp-content/themes/テーマ名/functions.php”に下記の記述を追加します。
1 2 3 4 5 |
//Contact Form 7 のreCAPTCHAのしきい値変更 add_filter( 'wpcf7_recaptcha_threshold', 'my_wpcf7_recaptcha_threshold' ); function my_wpcf7_recaptcha_threshold($score){ return 0.29; } |
この設定でフォーム送信ができないブラウザでも問題なくメール送信ができました。
ですが、スコア値を下げるということは、スパム判定を緩く設定したことになりますので、スパムが増える可能性があり「reCAPTCHA」導入の意味がなくなる可能性もありますが、しばらく様子をみまして、スパムが増えるようでしたら別の対策を考えます。
また、「Contact Form 7」のアップデートにより、今回の変更箇所がもとにもどる可能性がありますのでご注意ください。