お問い合わせフォームにreCAPTCHAを入れた話

スパムメールがきっかけで、AIと一緒にreCAPTCHA導入を進めた記録。詰まった箇所も含めて

ボットが送ってきたスパムメール

サイトのお問い合わせフォームに、海外業者からの営業スパムが届くようになりました。 件名は「Reach Real Customers in One Day」。 もっともらしい英文だけど、明らかにボットが送ってきているものです。

もともとハニーポット(見えない欄にボットだけが入力してしまう仕掛け)は入れていたけど、それだけではすり抜けてくる。というわけで reCAPTCHA v3 を追加することにしました。 https://www.google.com/recaptcha/admin/create

やったことは大きく3つ。

  • Google reCAPTCHAの管理画面でサイトキーとシークレットキーを取得
  • フォーム側にスクリプトを読み込んで、送信時にトークンを付与
  • サーバー側(Astroのお問い合わせAPI)でそのトークンを検証する処理を追加

作業自体はそこまで難しくなかったけど、地味に手間取ったのが見た目の問題。reCAPTCHAを入れると右下に青いバッジが出てくる。これを消そうとCSSでvisibility: hiddenを書いたのに、なぜか消えない。

原因は、Astroのコンポーネントのstyleは基本的に「そのコンポーネントの中の要素にしか効かない」仕組みになっていて、Googleのスクリプトが後から追加する要素はその対象外だったから。<style is:global>という書き方に変えることで解決しました。

ひとつ機能を足すだけでも、こういう「知らないと気づけない仕様」にぶつかる。地味だけど、こういうのを潰していく作業が重要だなあと思います。