reCAPTCHAがCloudflare Turnstileに切り替わった話

reCAPTCHAがCloudflare Turnstileに切り替わった話

Contact Form 7の管理画面を開いたら、見慣れない警告が出ていました。
「Googleはすべてのユーザーを段階的にreCAPTCHA Enterpriseへ移行させる計画を進めています」。
放っておいていいやつなのか気になって、ちゃんと調べてみることにしました。

reCAPTCHA、実は無料枠が大幅に縮小されていた

縮小幅は衝撃的でした。
調べてみると、GoogleはreCAPTCHAの無料枠を月100万回から月1万回へと大幅に縮小していました。
てっきり最近の話かと思ったんですが、Google Cloud公式のリリースノートを見る限り、この新しい料金体系は2024年1月に発表・同年4月から適用・8月に完全移行という流れで、実はもう2年近く前の話でした。単に自分が気づくのが遅かっただけのようです。

ここが本題です。しかも無料枠を使うだけでもGoogle Cloudの課金アカウント(クレジットカード)紐付けが必須になっていて、枠を超えると自動的に課金されるのではなく429エラーでCAPTCHA自体が止まり、フォームが機能しなくなる仕様だと分かりました。

結果はセーフでした。うちのサイト規模なら月1万回を超えることはまずないので、課金される心配自体はほぼゼロです。
ただ、「動かすためだけに、クレジットカードを紐付けたGoogle Cloudアカウントを維持し続ける」こと自体が、地味にリスクだなと感じました。
使ってもいない課金アカウントを放置しておくのは、精神衛生上もあまりよくありません。

Cloudflare Turnstileという選択肢

選択肢はありました。調べていく中で、Contact Form 7は6.1からCloudflare Turnstileをネイティブ統合していて、無料・課金アカウント不要な代替として推奨されていることが分かりました。
うちはもともとTurnstileを別の用途でスタンドアロン利用していたこともあり(ドメイン自体のネームサーバーはXserverのまま)、乗り換えるハードルは低そうでした。

Turnstileのウィジェット作成は、CloudflareのAPI(POST /accounts/{account_id}/challenges/widgets)から行いました。
必要な権限は最小権限の「Turnstile Sites:Edit」だけで、パスワードなしのAPIトークン1つで完結します。
管理画面をポチポチ操作しなくても、API経由でサクッと作れたのは地味にありがたかったです。

過去に踏んだ罠が、また同じ形で再発した

既視感がありました。以前「reCAPTCHAを特定ページだけに読み込ませる方法」という記事を書いたことがあるのですが、今回Turnstileに切り替えたところ、全く同じ罠がもう一度再発しました。
Contact Form 7は、CAPTCHA用のスクリプトを設定しているだけで、フォームを使わないページも含めて全ページに無条件で読み込んでしまう仕様なのです。

対処法もそのまま流用できました。
wp_dequeue_script/wp_deregister_scriptで、お問い合わせページ以外からスクリプトを外す処理です。
ハンドル名だけcloudflare-turnstileに差し替えれば、以前書いたコードがほぼそのまま動きました。
ツールが変わっても、CF7側の「全ページ読み込み」という設計自体は変わっていないんだなと妙に納得しました。

まとめ

学びは2つです。今回の乗り換えの一番の学びは、「動いているから大丈夫」ではなく、裏側の料金体系が変わっていないか定期的に確認する必要があるということでした。
そしてもうひとつ、一度どこかで踏んだ罠は、ツールが変わっても同じ構造のまま再発することがある、というのも実感できた回でした。
過去に書いた対処法がそのまま使い回せたのは、地味に嬉しい発見でした。

この記事を書いた人

Web制作歴10年近く。WordPressのテーマカスタマイズやコーディングを中心に、副業・本業ともにweb制作に携わっています。このブログでは、実際に手を動かして分かったことを書いています。

Cat's Handをフォローする

この記事が参考になったら、応援クリックをお願いします

タイトルとURLをコピーしました