Laravelで会員登録機能を提供していると、避けて通れないのが「スパム登録」の問題です。私の環境でも、1日20件ほどの不正登録に悩まされていました。
ですが、Google reCAPTCHA v3 を Laravel Breeze の新規登録フォームに組み込んだ結果…➡ 不正登録はゼロに!完全にシャットアウトできました。
ログにもシャットアウトの報告がどんどんやってきます。
すげー効果です。
✅ 実装はとても簡単
1️⃣ GoogleでreCAPTCHA v3キーを取得
https://www.google.com/recaptcha/admin/
GoogleのreCAPTCHAの管理サイトからサイトキーとシークレットキーを取得
(Googleへのログインが必要です)
2️⃣ 環境変数に追加
.env
RECAPTCHA_SITE_KEY=your_site_key
RECAPTCHA_SECRET_KEY=your_secret_key
3️⃣ Bladeにスクリプト追加
blade
<!-- resources/views/auth/register.blade.php -->
<script src="https://www.google.com/recaptcha/api.js?render={{ env('RECAPTCHA_SITE_KEY') }}"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('{{ env('RECAPTCHA_SITE_KEY') }}', {action: 'register'}).then(function(token) {
document.getElementById('recaptcha_token').value = token;
});
});
</script>
<input type="hidden" name="recaptcha_token" id="recaptcha_token">
4️⃣ コントローラ側で検証処理追加
php
use Illuminate\Support\Facades\Http;
public function store(Request $request)
{
$response = Http::asForm()->post('https://www.google.com/recaptcha/api/siteverify', [
'secret' => env('RECAPTCHA_SECRET_KEY'),
'response' => $request->input('recaptcha_token'),
]);
$result = $response->json();
if (!($result['success'] ?? false) || ($result['score'] ?? 0) < 0.5) {
\Log::warning('reCAPTCHA failed', [
'ip' => $request->ip(),
'email' => $request->input('email'),
'score' => $result['score'] ?? null,
'action' => $result['action'] ?? null,
'hostname' => $result['hostname'] ?? null,
]);
return back()->withErrors(['recaptcha' => '不正なアクセスが検出されました。']);
}
// 通常のユーザー登録処理
}
📊 効果は抜群!
導入前は毎日20件ほどのスパムが登録されていたのに、 導入初日からゼロ件に!
reCAPTCHAスコアの判定とログ出力をしておくと、攻撃の状況がしっかり確認でき、 必要に応じてスコア閾値も調整できます。
🎯 まとめ
導入は たった数ステップ
スパム登録 完全ブロック
開発者にとって 手軽に導入できる最強の対策
Laravel Breezeで新規登録フォームを使っているなら、 reCAPTCHA v3の導入は必須レベル です。