問い合わせフォームやコメントフォームをスパムから保護するのに重宝するreCaptcha(リキャプチャ)。問い合わせフォームを設置しない場合もログインフォームや登録フォームの保護などセキュリティ面の強化にもなりますので導入必須の機能と言えるでしょう。
そんな中、設定したはずのInvisible reCaptchaをスパムが素通りしはじめたので備忘録がてらまとめます。
結論
Invisible reCaptchaの開発は終了したようです。最新のWordPressに対応しないので代替を探す必要があります。プラグインの公式を見れば英語ながらレビュー欄にコメントがあります。しかしながら、『Invisible reCaptcha』で検索するとどのサイトでも現役のプラグインとして紹介されています。
こちらのプラグインについては早々に削除しましょう。以下の記事はそんな事とはつゆ知らず悪戦苦闘する様子を綴ったログです。
そもそもreCaptchaとは?
「私はロボットではありません」「信号機のタイルをすべて選択して下さい」といった『V2』を経て、とうとう一切の確認アルゴリズムを不可視化した強力なアンチスパム(V3)。Googleが提供するサービスです。
WordPressに導入するにはInvisible reCaptchaが軽量で高機能です。
発生の経緯
「Invisible reCaptcha」とContactForm7の「インテグレーション」を競合させたことに端を発します。
Invisible reCaptcha
Invisible reCaptchaはWordPressにreCaptchaを導入する手段の一つです。V3の時点である意味不可視化が成されたのでInvisible reCaptcha=reCaptcha(V3)だと勘違いしそうですが、後述するContact Form7の機能でも導入できます。
Contact Form 7のインテグレーション機能
上記の勘違いで、Invisible reCaptchaを一通り有効にした上でContact Form 7の「インテグレーションのセットアップ」も設定しました。ところがこのインテグレーション、セットアップするとサイト全体を保護します。フォームだけじゃないの?
実際、バージョン7.5.1以前のContact Form7ではInvisible reCaptchaを導入した上で問い合わせフォームにタグ[reCaptcha]を設置するという手順でした。
PageSpeed Insightsから重複を確認、削除
サイトの軽量化、高速化のためインサイトを確認した際にrecaptcha__ja.jsが2つリストされていたので重複に気づきました。
で、このインテグレーションを削除したところ、reCaptchaの挙動がおかしくなります。
動作はしているのでそれ以上どうにもしようもないのですが、スパムが毎日必ずすり抜けてくるのでたまらずInvisible側を無効にしてContactForm側からサイト全体の保護に切り替えました。一旦、泣き寝入りです。動作は正常に戻りました。
記録が残っていませんが、このあたりで「サイトがreCaptchaトークンを検証していないことが検出されました」エラーが出ていたと思います。見た目上不備はなく、再度「保存する」など押しても状況変わらずでした。
解決の流れ
そんなこんなしてるとGoogle Search Consoleから久々にお達しがありました。
- LCP の問題: 2.5秒 超(モバイル)
Invisible reCaptchaで運用してたときは合格してたことを見るとやはり全体保護は処理として重いようです。多少スパムが漏れてもサイトの評価には代えられない…ということでContactFormのインテグレーションを削除、代わりに無効化していたInvisible reCaptchaを再セットアップしました。
するとどうしたことか、動作の怪しかったInvisible reCaptchaは息を吹き返し、漏れ入り込んでたスパムもピタリと止まりました。
ん?これはまさか…
- Invisible reCaptchaをセットアップ(Google reCaptchaと連携)
- Contact Form7のインテグレーション有効(連携を更新)
- (ここで重複に気づく)
- Contact Form7のインテグレーション無効(連携が解除)
- Invisible reCaptchaがいまいち機能しない(連携されてない?)
- Invisible reCaptchaを無効化(Contact Form7側を連携)
- (機能するけど重い)
- Contact Form7のインテグレーション無効(連携が解除)
- Invisible reCaptchaをセットアップ(Google reCaptchaと連携)
といった流れなのでは…
とりあえずまとめ
- Contact Form7のreCaptchaはサイト全体を保護する。(Invisible reCaptchaと競合する)
- 競合(重複)した状態から片方を解除しても勝手には権限がスライドはしない。
- Invisible reCaptchaのほうがサイトが軽量になる。
ただし現時点でInvisible reCaptchaは更新が2年間止まってるので後継プラグインも検討すべし。
追記
と喜んだのもつかの間、1週間もしないうちにアクセスを検出しなくなりスパムも漏れ入るようになりました。時間差をもって影響が出るのが謎ですが、どうもInvisible reCaptchaに脆弱性のようなものがあるように感じます。
また、Contact Form7のスパムログを見ると正規メールにはない項目「token」がありまるで合鍵を使って通り抜けたかのような印象…これはハックされてるのでは
【2021/11/30追記】Invisible reCaptcha開発終了してました。これまでありがとう…
コメント