You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

零基础开发求助:如何让reCaptcha验证码正常校验生效?

reCaptcha验证码绕过问题修复

问题原因

你现有代码的if条件存在语法逻辑错误:将验证码结果判断和发邮件函数错误拼接,导致验证码校验逻辑完全没有生效,只要邮件函数可执行就会直接进入提交成功分支,完全绕过了验证码判断。

修复逻辑

需要按顺序执行三步判断,不能把不同逻辑混写在同一个if条件里:

  • 第一步先判断用户有没有提交验证码响应参数,没提交就说明用户没勾选验证码,直接返回对应提示
  • 第二步调用验证码校验方法,拿到校验结果
  • 第三步只有验证码校验通过时,才执行发邮件逻辑,校验失败返回验证错误提示

修正后可直接使用的代码

// 读取前端提交的验证码参数,不存在则默认置为空
$captchaResp = $_POST['g-recaptcha-response'] ?? '';

// 未携带验证码参数=用户没勾选验证,直接返回提示终止流程
if (empty($captchaResp)) {
    echo "<h1>提交失败</h1>";
    echo "<fieldset>";
    echo "<div id='error_page'>";
    echo "<p>请先勾选人机验证选项后再提交表单</p>";
    echo "</div>";
    echo "</fieldset>";
    exit;
}

// 执行验证码校验
$checkResult = CheckCaptcha($captchaResp);

// 校验通过才执行发邮件操作
if ($checkResult['success'] === true) {
    // 调用发邮件方法
    $sendStatus = mail($address, $e_subject, $msg, $headers);
    if ($sendStatus) {
        echo "<h1>Captcha verified</h1>";
        echo "<fieldset>";
        echo "<div id='success_page'>";
        echo "<h1>Email Sent Successfully.</h1>";
        echo "</div>";
        echo "</fieldset>";
    } else {
        echo "<h1>提交失败</h1><p>邮件发送服务异常,请稍后重试</p>";
    }
} else {
   echo "<h1>验证失败</h1>";
   echo "<fieldset>";
   echo "<div id='error_page'>";
   echo "<p>人机验证未通过,请重新完成验证后提交</p>";
   echo "</div>";
   echo "</fieldset>";
}

额外注意

要保证验证码功能完全生效,前端页面必须正确加载reCaptcha组件,提交表单时才会自动带上g-recaptcha-response参数;另外你自定义的CheckCaptcha方法内部需要正确携带站点密钥、用户IP、验证码响应值向校验接口发起请求,不能直接返回固定的成功结果。

内容的提问来源于stack exchange,提问作者TomTom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:51:07