Webサイトやフォームを運営していると、スパム投稿やボットによるアクセスが問題になることがあります。これを防ぐには、CAPTCHA(キャプチャ)と呼ばれる仕組みを導入するのが一般的です。この記事では、代表的な3つのCAPTCHAサービス(reCAPTCHA、hCaptcha、Turnstile)を紹介し、特にCloudflare Turnstileの導入方法を詳しく解説します。
Cloudflare の管理画面(Cloudflare Dashboard)にアクセスし、無料アカウントを作成します。
次に「Turnstile」メニューから「Create site」を選び、ラベルとドメインを設定すると、Site key
とSecret key
が発行されます。
1<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
2
3<form method="POST" action="/api/contact">
4 <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
5 <button type="submit">送信</button>
6</form>
7
フォーム送信時に取得できるトークン(cf-turnstile-response
)を、Cloudflareの検証エンドポイントであるhttps://challenges.cloudflare.com/turnstile/v0/siteverifyにPOSTすることで、正規のユーザーかどうかをサーバー側で確認できます。
Turnstile の sitekey
は開発・本番で別のキーを使用することが推奨されます。Next.js では .env
ファイルを使って簡単に切り替えることができます。
1# .env.local(開発用)
2NEXT_PUBLIC_TURNSTILE_SITE_KEY=dev-site-key
3
4# .env.production(本番用)
5NEXT_PUBLIC_TURNSTILE_SITE_KEY=prod-site-key
6
JSX内では以下のように使用します:
1<div
2 className="cf-turnstile"
3 data-sitekey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY}
4/>
5
process.env
で柔軟に対応できるユーザーの操作を求めない Turnstile は、UXを損なわずにセキュリティを向上させたい開発者にとって、非常に魅力的なソリューションです。