谷歌重新开始第二次在服务器端验证

时间:2016-04-18 16:39:13

标签: php recaptcha

我有一个包含多个字段的表单&验证码。单击提交按钮时,其中一个字段无效& recaptcha有效它提交表单但验证这些字段并在用户失败时向用户返回错误消息。

在此阶段,recaptcha仍然被检查&在前端验证。如果用户在具有错误消息的字段上修复了该问题并重新提交表单,则recaptcha的响应为false,因此未经过验证。

enter image description here

输入有效的电子邮件后,我明白了:

enter image description here

我检查验证码的功能是:

enter image description here

如果为false,则会导致上面屏幕截图中显示的错误消息。

2 个答案:

答案 0 :(得分:2)

重新验证验证只有一次。

您有几种可能的方法:

  • 保存用户已成功完成验证码的会话变量,并且不要求它第二次通过验证。请务必在成功提交时清除变量,否则攻击者可以解决一次并提交一百万次。
  • 重新显示验证码(使用grecaptcha.render调用),如果表单提交失败,则要求他们再次填写验证码。
  • 不要验证验证码,直到所有其他字段首先验证。

答案 1 :(得分:2)

来自官方docs

  

如果您的网站使用AJAX请求执行服务器端验证,   您应该只验证用户的reCAPTCHA响应令牌   (g-recaptcha-response)一次。如果已使用a进行验证尝试   特别令牌,它不能再使用。你需要打电话   grecaptcha.reset()要求最终用户再次使用reCAPTCHA进行验证。

这意味着,您的verifyCaptcha()函数只能运行一次。将验证标志保存到会话变量中,只需检查它是否存在,并在每个后续请求中有效。

相关问题