【问题标题】:Contact Form submits without checking reCAPTCHA联系表格提交而不检查 reCAPTCHA
【发布时间】:2019-08-05 05:56:35
【问题描述】:

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

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

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


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

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

我做错了吗?

【问题讨论】:

  • 是什么让您认为这里有什么问题?至少在 v3 中,这应该是标准行为
  • @NicoHaase 所以当有人在填写完表格后点击“提交”时,即使他们没有通过reCAPTCHA也应该发送表格?
  • 究竟是什么让您认为提交表单的人没有通过验证码流程?在 v3 中,这不需要任何手动交互
  • @NicoHaase 我正在使用 V2,我不喜欢 V3
  • 没有人喜欢 v3,因为用户或管理员看不到它在前面工作,他们不信任它。

标签: php html recaptcha


【解决方案1】:

您可以使用以下小 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 的情况下提交
【解决方案2】:

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

步骤如下:

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

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

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

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

【讨论】:

    【解决方案3】:

    在此视频中得到了我正在寻找的确切响应: https://youtu.be/rFccSL76SeY

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

    【讨论】:

    • 很高兴听到这个消息。但这不是你所问的。你特别问过那个表格可以让你提交,这在这个 youtube 视频中也是一样的。无论用户是否点击recaptcha,表单都会被提交。
    • @galzor 什么?不,它没有。在此视频中,如果您不运行验证码,表单会显示错误?我复制了它,它对我有用..
    • 亲爱的@Kevin,你不明白,再看视频。当用户点击提交按钮而不检查recaptcha时,表单仍在提交并且因为php代码在同一页面上,它在同一页面上显示错误,检查用户是否检查了recaptcha。但是当你问这个问题时,如果recaptcha 无效或被检查,你感觉更像是想阻止提交表单。这就是为什么这里的其他人建议你使用 javascript 解决方案而不是 php 解决方案。
    • @Galzor 我不知道你是从哪里得到的,但我从视频中复制了确切的代码,如果我不点击recaptcha,我会得到一个错误,所以是的 - 这个解决方案对我有用吗? varsling.develop.no 自己试试这个网站,不点recaptcha会报错。感谢您尝试帮助我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2016-05-11
    • 2014-11-01
    • 1970-01-01
    • 2015-03-31
    相关资源
    最近更新 更多