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

Friendly Captcha 疑问:是否需要调用验证请求?

关于Friendly Captcha服务器端验证的必要性与实现说明

必须要执行第三步的服务器端验证,这是保障CAPTCHA安全生效的核心步骤,原因和实现方式如下:

为什么必须做服务器端验证?

  • 前端逻辑完全可被绕过:恶意用户能通过修改前端代码、模拟JS事件等方式,直接跳过解谜步骤,强行启用按钮或伪造验证成功的状态,直接提交请求。你现在看到的前端按钮禁用只是给合法用户的体验优化,对恶意请求毫无阻挡作用。
  • 只有服务器端验证能真正校验合法性:Friendly Captcha的前端处理只是让用户完成交互,但验证结果的真实性必须由后端和官方API确认,才能确保提交请求的是真实完成解谜的人类用户,避免垃圾注册、恶意提交等问题。

怎么实现服务器端验证?

  • 前端完成解谜后,页面会自动生成一个名为frc-captcha-response的隐藏输入字段,里面存着验证令牌。你只需要确保表单提交时,把这个字段的值和其他表单数据一起发送到后端。
  • 后端收到请求后,调用Friendly Captcha的验证端点,传入两个参数:你的站点密钥(Secret Key,在控制台获取)和前端传来的验证令牌。
  • 根据验证端点返回的结果处理请求:如果返回success: true,就继续处理业务逻辑;如果验证失败,直接拒绝该请求。

举个Node.js后端的简单实现示例:

const axios = require('axios');

// 封装验证函数
async function checkCaptchaValidity(responseToken) {
  try {
    const verifyResult = await axios.post('https://api.friendlycaptcha.com/api/v1/siteverify', {
      secret: '你的站点密钥', // 替换成你自己的Secret Key
      response: responseToken
    });
    return verifyResult.data.success;
  } catch (error) {
    console.log('验证码验证请求出错:', error);
    return false;
  }
}

// 处理表单提交的接口
app.post('/submit', async (req, res) => {
  const captchaToken = req.body['frc-captcha-response'];
  const isCaptchaValid = await checkCaptchaValidity(captchaToken);

  if (!isCaptchaValid) {
    return res.status(400).send('验证码验证失败,请重试');
  }

  // 这里写表单提交后的业务逻辑,比如存储数据等
  res.send('提交成功');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:16