当前位置: 首页 > 面试题库 >

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

司寇阳曦
2023-03-14
问题内容

我刚刚用复选框设置了新的google
recaptcha,它在前端工作正常,但是我不知道如何在服务器端使用PHP处理它。我尝试使用下面的旧代码,但是即使验证码无效,也会发送表格。

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>';}

问题答案:

这是解决方案

index.html

<html>
  <head>
    <title>Google recapcha demo - Codeforgeek</title>
    <script src='https://www.google.com/recaptcha/api.js'></script>
  </head>
  <body>
    <h1>Google reCAPTHA Demo</h1>
    <form id="comment_form" action="form.php" method="post">
      <input type="email" placeholder="Type your email" size="40"><br><br>
      <textarea name="comment" rows="8" cols="39"></textarea><br><br>
      <input type="submit" name="submit" value="Post comment"><br><br>
      <div class="g-recaptcha" data-sitekey="=== Your site key ==="></div>
    </form>
  </body>
</html>

verify.php

<?php
    $email; $comment; $captcha;

    if(isset($_POST['email']))
        $email=$_POST['email'];
    if(isset($_POST['comment']))
        $comment=$_POST['comment'];
    if(isset($_POST['g-recaptcha-response']))
        $captcha=$_POST['g-recaptcha-response'];

    if(!$captcha){
        echo '<h2>Please check the the captcha form.</h2>';
        exit;
    }

    $response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
    if($response['success'] == false)
    {
        echo '<h2>You are spammer ! Get the @$%K out</h2>';
    }
    else
    {
        echo '<h2>Thanks for posting comment.</h2>';
    }
?>

http://codeforgeek.com/2014/12/google-recaptcha-
tutorial/



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

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

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

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

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