如何在Google reCAPTCHA验证通过后实现页面重定向?
解决Google reCAPTCHA验证成功后跳转的问题
首先得帮你梳理下原代码里的几个核心问题:
- 语法错误:JS代码里多了一个多余的
},直接导致脚本无法正常解析 - 判断时机不对:你一开始就去检查
grecaptcha.getResponse(),这时候用户还没碰验证码呢,肯定拿不到有效结果 - 安全漏洞:只靠前端判断验证结果完全不安全,懂点技术的人可以直接绕过,必须通过后端调用Google的
siteverify接口做真实验证
下面给你一套完整的前后端代码示例,包含正确的验证逻辑和跳转处理:
前端代码(HTML+JS)
<!DOCTYPE html> <html> <head> <title>reCAPTCHA验证示例</title> <!-- 引入reCAPTCHA官方脚本 --> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </head> <body> <!-- reCAPTCHA容器,替换成你的公开Site Key --> <div class="g-recaptcha" data-sitekey="你的公开Site Key" data-callback="onCaptchaSuccess"></div> <script type="text/javascript"> // 验证码验证成功后自动触发的回调函数 function onCaptchaSuccess(token) { // 创建隐藏表单,把验证token发送到后端 const form = document.createElement('form'); form.method = 'POST'; form.action = 'verify-recaptcha.php'; // 后端验证脚本的路径 // 添加验证token字段 const tokenInput = document.createElement('input'); tokenInput.type = 'hidden'; tokenInput.name = 'g-recaptcha-response'; tokenInput.value = token; form.appendChild(tokenInput); document.body.appendChild(form); form.submit(); // 提交表单到后端做真实验证 } </script> </body> </html>
后端代码(以PHP为例,verify-recaptcha.php)
<?php // 替换成你的私密Secret Key(从Google reCAPTCHA控制台获取) $secretKey = "你的私密Secret Key"; $captchaResponse = $_POST['g-recaptcha-response'] ?? ''; // 调用Google官方的siteverify接口验证token有效性 $url = 'https://www.google.com/recaptcha/api/siteverify'; $data = [ 'secret' => $secretKey, 'response' => $captchaResponse, 'remoteip' => $_SERVER['REMOTE_ADDR'] // 可选,提交验证的用户IP,用于增强安全性 ]; // 组装POST请求参数并发送 $options = [ 'http' => [ 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => http_build_query($data) ] ]; $context = stream_context_create($options); $response = file_get_contents($url, false, $context); $result = json_decode($response); // 验证成功则跳转目标页面,失败则提示用户 if ($result->success) { header('Location: https://你的目标网站地址'); exit; } else { echo "验证码验证失败,请重试!"; echo '<br><a href="javascript:history.back()">返回重新验证</a>'; } ?>
关键说明:
- 回调函数的作用:reCAPTCHA的
data-callback属性会在用户完成验证后自动触发指定函数,这时候才能拿到有效的验证token,避免提前判断的问题 - siteverify接口的用法:这个接口是Google官方提供的验证通道,只有通过它确认token有效,才能安全执行跳转,防止恶意绕过
- 密钥替换:记得把代码里的
你的公开Site Key和你的私密Secret Key替换成你在Google reCAPTCHA控制台获取的对应密钥
内容的提问来源于stack exchange,提问作者Doctor Delta
相关产品推荐
相关产品推荐

