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

如何不依赖Google或WordPress实现Google reCAPTCHA的纯PHP替代方案

纯PHP无依赖reCAPTCHA v3替代实现方案

核心特性

  • 完全不依赖Google、WordPress等第三方服务,纯PHP后端实现
  • 前端无交互感知,效果和reCAPTCHA v3完全一致,不需要用户手动输入验证码
  • 支持风险分判定,可自定义拦截阈值
  • 自带token防重放、过期校验逻辑

前端集成代码

和reCAPTCHA v3的调用逻辑类似,只需要在表单中插入隐藏字段,自动收集基础行为数据即可:

<form action="submit.php" method="post">
  <!-- 其他表单字段 -->
  <input type="hidden" name="verify_token" id="verify_token" value="">
  <input type="submit" value="提交">
</form>

<script>
// 页面加载时生成初始参数
window.pageLoadTime = Date.now();
window.mouseMoveCount = 0;
window.hasFocus = false;

// 监听基础行为数据
document.addEventListener('mousemove', () => window.mouseMoveCount++);
window.addEventListener('focus', () => window.hasFocus = true);

// 页面即将提交时生成验证参数
document.querySelector('form').addEventListener('submit', (e) => {
  const stayTime = Math.floor((Date.now() - window.pageLoadTime) / 1000);
  document.getElementById('verify_token').value = `${stayTime}|${window.mouseMoveCount}|${window.hasFocus ? 1 : 0}`;
});
</script>

后端PHP实现逻辑

1. 表单页生成验证密钥(表单页顶部加入)

<?php
session_start();
// 生成随机单次有效token,存到session防重放
$_SESSION['captcha_check'] = bin2hex(random_bytes(16));
$_SESSION['captcha_expire'] = time() + 3600; // 1小时有效期
?>

2. 提交验证逻辑(submit.php实现)

<?php
session_start();

function custom_captcha_verify(): bool {
  // 基础校验:session不存在直接拦截
  if (empty($_SESSION['captcha_check']) || empty($_SESSION['captcha_expire']) || time() > $_SESSION['captcha_expire']) {
    unset($_SESSION['captcha_check'], $_SESSION['captcha_expire']);
    return false;
  }
  // 销毁单次token,防止重放
  unset($_SESSION['captcha_check'], $_SESSION['captcha_expire']);
  
  // 解析前端上传的行为参数
  if (empty($_POST['verify_token'])) return false;
  list($stay_time, $mouse_count, $has_focus) = array_map('intval', explode('|', $_POST['verify_token']));
  
  // 风险判定规则,可根据自身场景调整阈值
  $risk_score = 0;
  $risk_score += ($stay_time < 3) ? 50 : 0; // 页面停留不足3秒加50风险分
  $risk_score += ($mouse_count < 5) ? 30 : 0; // 鼠标移动次数少于5次加30分
  $risk_score += ($has_focus === 0) ? 20 : 0; // 页面从未获得焦点加20分
  
  // 总分超过60判定为机器人
  return $risk_score < 60;
}

// 调用示例
if (custom_captcha_verify()) {
  // 验证通过,处理表单提交逻辑
  echo "提交成功";
} else {
  // 验证失败,拦截请求
  echo "验证失败,请刷新页面重试";
}
?>

自定义优化建议

  • 可根据自身业务场景调整风险规则和阈值,比如针对评论区可以调高拦截阈值,避免误拦截正常用户
  • 可扩展更多行为特征:比如键盘输入速度、滚动条操作记录、是否有批量重复提交特征
  • 高风险场景下可搭配低频次的点击验证作为降级方案,进一步提升拦截准确率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:04