hcaptcha

又被人盯上了,来攻击我的网站刷流量,这次防御的手段打算加上验证码

注册

  • 注册的话自己随意就好有什么用什么

微信截图_20250427083649.png

  1. 用户先完成验证码,当表单提交时,会带有一个令牌
  2. 提交表单后,后端收到表单内的令牌,向hcaptcha服务器验证
  3. 根据服务器返回的结果进行响应
  • 流程其实很简单,当然github上也有开源的同类产品

部署

  • 注册以后会有免费的版本,正常会获得一个账户级密钥和站点密钥,站点密钥是部署在前端验证码上,账户级密钥是用于向hcaptcha服务器发送验证请求使用的
<html>
  <head>
    <title>hCaptcha Demo</title>
    <script src="https://js.hcaptcha.com/1/api.js" async defer></script>
  </head>
  <body>
    <form action="" method="POST">
      <input type="text" name="email" placeholder="Email" />
      <input type="password" name="password" placeholder="Password" />
      <div class="h-captcha" data-sitekey="站点密钥"></div>
      <br />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>
  • 当前端的请求发送到后端,就需要向hcaptcha服务器发送验证请求
curl https://api.hcaptcha.com/siteverify \
  -X POST \
  -d "secret=YOUR-SECRET&remoteip=CLIENT-IP&response=CLIENT-RESPONSE"

请勿使用 GET 请求调用 /siteverify。请使用 POST 请求,并在表单正文中传递参数,而不是 URL。

  • YOUR-SECRET : 是您在仪表板中生成的站点密钥(“ES_...”)
  • CLIENT-IP : 是客户端的 IP 地址。虽然remoteip并非严格要求,但提供此信息有助于提高验证准确性
  • CLIENT-RESPONSE : hCaptcha SDK返回给客户端的token

Siteverify 错误代码

错误代码 描述
missing-input-secret 您的密钥丢失
invalid-input-secret 您的密钥无效或格式错误
missing-input-response 缺少响应参数(验证令牌)
invalid-input-response 响应参数(验证令牌)无效或格式错误
expired-input-response 响应参数(验证令牌)已过期。(默认120秒)
already-seen-response 响应参数(验证令牌)已经被验证过一次
bad-request 请求无效或格式错误
missing-remoteip 缺少 remoteip 参数
invalid-remoteip remoteip 参数不是有效的 IP 地址或盲值
not-using-dummy-passcode 您使用了测试站点密钥,但尚未使用其匹配的密钥
sitekey-secret-mismatch 站点密钥未使用提供的密钥进行注册
  • 具体更详细的配置内容参考配置

验证

  • 在评论表单中加入了验证码

微信截图_20250427085303.png

  • 在下载文件的位置加入验证码

微信截图_20250427085347.png