在哪里处理 reCAPTCHA?在 JavaScript 中还是在 PHP 中?

Posted

技术标签:

【中文标题】在哪里处理 reCAPTCHA?在 JavaScript 中还是在 PHP 中?【英文标题】:Where to handle reCAPTCHA? In JavaScript or in PHP? 【发布时间】:2019-02-18 07:42:23 【问题描述】:

我在 Web 开发方面的经验几乎为零,但我找到了一个带有 reCAPTCHA 的联系表单的simple example,并试图弄清楚如何让它在我的 WordPress 网站上运行。有live demo。

是否可以在 index.js 中以检查验证码、异步发送表单数据并处理响应的方式实现“提交”功能?

new Vue(
  // root node
  el: "#app",
  // the instance state
  //...
  methods: 
    // submit form handler
    submit: function() 
      this.submitted = true;
    ,
  //..
);

如果是,可以在服务器端有一个 php 脚本来处理请求,调用 mail(...) 并返回“OK”,但不清楚在这种情况下如何检查验证码?谁来检查它,javascript 还是 PHP?

【问题讨论】:

每当我使用recaptcha 时,我总是同时使用JS 和PHP。 JS 在客户端进行验证,但无需使用 PHP 进行服务器端检查即可绕过。可能有一种方法可以在没有 PHP 方面的情况下更安全地实现它,但我不知道如何做到这一点。 @FergalAndrews 应该使用什么提交函数将验证码结果发送到 PHP? 我已经在 Alexey 下面发布了一个答案 这里是实现webdesign.tutsplus.com/tutorials/…的页面 【参考方案1】:

这是我使用的类方法。参数 ($gRecaptchaResponse) 是 google 在您使用 javascript 提交验证码时返回的内容

protected function validateGoogleRecaptcha($gRecaptchaResponse)


    $secretKey = $this->config['application']['captcha']['recaptcha']['secretKey'];
    $reCaptcha = new \ReCaptcha($secretKey);

    $response = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $gRecaptchaResponse
    );

    return $response;

【讨论】:

是否可以不重新加载页面? @Alexey - 我已将 recaptcha 与 ajax 表单提交一起使用。有几个网站提供说明。示例:developer.hyvor.com/php/…

以上是关于在哪里处理 reCAPTCHA?在 JavaScript 中还是在 PHP 中?的主要内容,如果未能解决你的问题,请参考以下文章

reCaptcha v3 处理分数回调

如何解决 Google v3 reCaptcha 超时?

如何在服务器端验证 Google reCAPTCHA v3?

ReCaptcha v2 客户端事件

Firebase 电话登录,在哪里放置 Firebase 验证码?

在 ASP.NET 的服务器端验证 Recaptcha 2 (No CAPTCHA reCAPTCHA)