联系表提交而不检查 reCAPTCHA

Contact Form submits without checking reCAPTCHA

我正在制作一个带有联系表的网络应用程序,并且在我的网站上有一个 google reCAPTCHA (v2) 以防止机器人垃圾邮件。

我已将此代码添加到网站:

<div class="g-recaptcha" data-sitekey=""></div>


<script src="https://www.google.com/recaptcha/api.js" async defer></script>

当我尝试提交表单时,我可以在不使用 reCAPTCHA 的情况下提交它。

我是不是做错了什么?

您可以使用下面的小 jquery 代码来检查用户是否试图在不单击 recaptcha 的情况下提交表单。

$("form").submit(function(event) {
   var recaptcha = $("#g-recaptcha-response").val();
   if (recaptcha === "") {
      event.preventDefault();
      alert("Please check the recaptcha");
   }
});

此外,您可以使用以下代码进行 api 调用以检查响应是否有效。如果用户验证了自己,响应将是一个很长的字符串。

if (grecaptcha.getResponse() == ""){
    alert("You can't proceed!");
} else {
    alert("Thank you");
}

查看此处 How to Validate Google reCaptcha on Form Submit 了解有关如何验证 recaptcha 的更多信息。

除了 Galzor 所说的之外,您还需要按照此处所述实施服务器端验证 https://developers.google.com/recaptcha/docs/verify

步骤如下:

  • 将 reCaptcha 小部件添加到您要保护的表单,在注册小部件时使用 public 键(您应该在注册 reCaptcha 时从控制台 https://www.google.com/recaptcha/admin/create 获得它)

  • 当您提交表单时,在 javascript 中,通过检查 $("#g-recaptcha-response") 输入字段中的长哈希字符串(令牌)来检查验证码是否已解决

  • 当您提交表单时,在服务器端,在处理任何事情之前,您需要使用 Secret 调用 google Recaptcha Api(也来自控制台的私钥)并验证响应。

如果您不实施服务器端验证,机器人可以添加一些看起来像对#g-recaptcha-response 输入的正常响应的内容,并通过客户端验证。这也意味着仅仅检查服务器或客户端输入是否为空是不够的——你需要调用 ReCaptcha API 并检查它的响应是否令牌有效(Google 为 php)

在这个视频中得到了我想要的确切回应: https://youtu.be/rFccSL76SeY

感谢所有愿意提供帮助的人!