是否可以在没有服务器端支持的情况下在客户端使用 google recaptcha?如果可能的话,如何?

Is it possible to use google recaptcha on client side without server side support? If possible how?

提问人:Ali Nawaz 提问时间:2/1/2023 更新时间:2/4/2023 访问量:802

问:

目前,我正在从事 Nuxtjs 2 项目,其中我必须在客户端实现 Recaptcha,我不希望对 Recaptcha 的后端支持。我只想在前端处理它。如何在有或没有与 nuxtjs2 兼容的任何库的前端执行此操作?

客户端 nuxtjs2

评论


答:

0赞 CleverSkull 2/4/2023 #1

没有理由在没有服务器的情况下使用 reCAPTCHA。 reCAPTCHA 用于保护后端免受垃圾邮件的侵害。

如果你真的想这样做,你可以用 JavaScript 发出同样的请求。

但再说一遍:没有意义。

PHP 的 reCAPTCHA 验证:

function validate_captcha_response($code){
  if($_SERVER['HTTP_HOST']=="localhost") return true;
  if($code && strlen($code)>32){
    $secret = "<your reCaptcha v3 secret>";
    $ip = $_SERVER['REMOTE_ADDR'];
    $gcaptcha = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$code&remoteip=$ip"), true);
    return ($gcaptcha['success'] == true && $gcaptcha['score'] >= 0.8 && $gcaptcha['hostname'] == $_SERVER['SERVER_NAME']);
  }
  return false;
}

JavaScript 中的相同代码:

function validate_captcha_response(code){
  if(window.location.hostname=="localhost") return true;
  if(code && code.length>32){
    let secret = "<your reCaptcha v3 secret>";
    let gcaptcha = json_decode(file_get_contents(`https://www.google.com/recaptcha/api/siteverify?secret=${secret}&response=${code}`), true);
    return (gcaptcha['success'] == true && gcaptcha['score'] >= 0.8 && gcaptcha['hostname'] == window.location.hostname);
  }
  return false;
}

(请注意,我删除了 IP 功能)

代码来源: https://www.custom-captcha.com/