Php Google recaptcha第二次未在服务器端验证

Php Google recaptcha第二次未在服务器端验证,php,recaptcha,Php,Recaptcha,我有一个包含多个字段的表单&recaptcha。如果单击“提交”按钮时其中一个字段无效,则recaptcha有效,它将提交表单,但验证这些字段,如果失败,则向用户返回错误消息 在此阶段,recaptcha仍在前端进行检查和验证。如果用户修复了出现错误消息的字段上的问题,并重新提交表单,则来自recaptcha的响应为false,因此未验证 输入有效电子邮件后,我收到以下信息: 我检查验证码的功能如下: 如果为false,则会导致上面屏幕截图上显示的错误消息。recaptcha验证只有一次有

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

在此阶段,recaptcha仍在前端进行检查和验证。如果用户修复了出现错误消息的字段上的问题,并重新提交表单,则来自recaptcha的响应为false,因此未验证

输入有效电子邮件后,我收到以下信息:

我检查验证码的功能如下:


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

recaptcha验证只有一次有效

您有几种可能的方法:

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

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


      也就是说,verifyCaptcha()函数只能运行一次。将验证标志保存到会话变量中,只需检查它是否存在,以及在后续的每个请求中是否有效。

      这不是预期的行为吗?我宁愿在所有条目都生效之前不提交表单(以及验证)。