当前位置: 首页 > 知识库问答 >
问题:

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

谷梁涵忍
2023-03-14
require_once('recaptchalib.php');
$privatekey = "my key";
$resp = recaptcha_check_answer ($privatekey,
        $_SERVER["REMOTE_ADDR"],
        $_POST["recaptcha_challenge_field"],
        $_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
 $errCapt='<p style="color:#D6012C ">The CAPTCHA Code wasnot entered correctly.</p>';}

共有1个答案

呼延钱明
2023-03-14

虽然这里的答案确实有效,但它们使用的是get请求,该请求公开您的私钥(即使使用的是https)。在Google开发人员中,指定的方法是post

欲了解更多细节:https://stackoverflow.com/a/323286/1680919

function isValid() 
{
    try {

        $url = 'https://www.google.com/recaptcha/api/siteverify';
        $data = ['secret'   => '[YOUR SECRET KEY]',
                 'response' => $_POST['g-recaptcha-response'],
                 'remoteip' => $_SERVER['REMOTE_ADDR']];
                 
        $options = [
            'http' => [
                'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                'method'  => 'POST',
                'content' => http_build_query($data) 
            ]
        ];
    
        $context  = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        return json_decode($result)->success;
    }
    catch (Exception $e) {
        return null;
    }
}

数组语法:我使用“新”数组语法([]而不是数组(..))。如果您的php版本还不支持这一点,则必须相应地编辑这3个数组定义(请参见注释)。

 类似资料:
  • 问题内容: 我刚刚用复选框设置了新的google recaptcha,它在前端工作正常,但是我不知道如何在服务器端使用PHP处理它。我尝试使用下面的旧代码,但是即使验证码无效,也会发送表格。 问题答案: 这是解决方案 index.html verify.php http://codeforgeek.com/2014/12/google-recaptcha- tutorial/

  • 问题内容: 进行客户端或服务器端验证哪个更好? 在我们的情况下,我们正在使用 jQuery和MVC。 在我们的视图和控制器之间传递的JSON数据。 我所做的许多验证工作都是在用户输入数据时对其进行验证。例如,我使用该事件来防止文本框中的字母,设置最大字符数,并且该数字在一定范围内。 我想更好的问题是,与客户端相比,进行服务器端验证是否有任何好处? 真棒的答案大家。我们拥有的网站受到密码保护,并且用

  • 验证 SSH 服务器证书(客户端) 和 SSH 用户证书 类似,使用客户端机构认证来验证主机。需要一个 SSH 服务器数字证书认证机构签发服务器证书,客户端只需要保存 CA 的公钥。 使用一台处于气隙系统下的计算机来生成服务器数字证书认证机构的根证书: ❯ ssh-keygen -C "SSH Server Certificate Authority" -f sshserver.root.ca 使

  • 问题内容: 我有一个在Firebase上编写的应用程序。安全规则和客户端代码还不足以使我的应用正常工作。我需要连接服务器来执行一些任务: 清理非规范化的数据,这对于使用onDisconnect处理程序进行清理具有挑战性 建立数据的其他索引,这超出了 查询的能力范围 问题答案: _更新日期(20160611):如果您在https://firebase.google.com上创建了项目,则从服务器访问

  • 问题内容: 我正在建立一个使用RESTful API(Jersey)的AngularJS网络应用程序。 在服务器端,我正在使用Java应用程序服务器(详细来说是Glassfish 4)。 我的设置如下: AngularJS Webapp作为单个war文件部署到Java EE应用程序服务器。 RESTfulAPI(和后端逻辑)也作为war文件部署到同一Java EE应用程序服务器。 AngularJ

  • 问题内容: 我有一个角度应用程序,其中包含一个从示例中获取的保存按钮: 这对于客户端验证非常有用,因为当用户解决问题时它会变为false,但是我有一个电子邮件字段,如果另一个用户使用相同的电子邮件注册,则该字段设置为无效。 一旦我将电子邮件字段设置为无效,就无法提交表单,并且用户无法修复该验证错误。所以现在我不能再使用来禁用我的提交按钮。 肯定有更好的办法 问题答案: 我在几个项目中都需要这样做,