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

Google recaptcha not validating on server side the second time

我有一个包含多个字段和验证码的表单。如果单击提交按钮时其中一个字段无效且重新验证有效,则它会提交表单但会验证这些字段,如果失败,returns 会向用户发送一条错误消息。

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

输入有效的电子邮件后,我得到:

我检查验证码的函数是这样的:

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

recaptcha 验证只有一次有效。

您有几种可能的方法:

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

来自官方docs:

If your website performs server side validation using an AJAX request, you should only verify the user’s reCAPTCHA response token (g-recaptcha-response) once. If a verify attempt has been made with a particular token, it cannot be used again. You will need to call grecaptcha.reset() to ask the end user to verify with reCAPTCHA again.

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