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 中,然后简单地检查它是否存在并且在每个后续请求中都有效。
我有一个包含多个字段和验证码的表单。如果单击提交按钮时其中一个字段无效且重新验证有效,则它会提交表单但会验证这些字段,如果失败,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 中,然后简单地检查它是否存在并且在每个后续请求中都有效。