将Recaptcha令牌列入白名单,以避免要求用户生成新令牌,是否有更好的解决方案?

时间:2018-07-15 16:34:48

标签: forms validation security recaptcha server-side-validation

我有一个网站,该网站的表格上有一个recaptcha。表单具有很多无法验证到服务器端的服务器端验证,因此用户通常会使用相同的Recaptcha令牌提交多个表单。问题在于Recaptcha不太适合多重验证。

根据google's recaptcha documentation

  

每个reCAPTCHA用户响应令牌只能验证一次。

如果一个人尝试多次验证同一令牌,则Google的api返回timeout-or-duplicate

因此,为了使表单具有顺畅的用户体验,并且每次用户提交未通过服务器端验证的表单时,都不再请求再次填写验证码,我要么需要将验证码令牌验证推迟到服务器端验证(这会减慢服务器速度),或者我需要将验证码令牌列入白名单,例如3分钟。但是,将验证码列入白名单3分钟意味着有人可以制造出可以攻击我的网站3分钟的机器人...

我认为上述解决方案可能会降低安全性,因此我想知道什么是常见做法,或者您是否有更好的解决方案。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为标准做法是在用户第一次通过reCAPTCHA时设置cookie或会话变量,并使用该指示器来决定是否显示/检查reCAPTCHA。然后,您可以为该指标设置有效期,或者无限期保留。

现在进入安全性问题。 reCAPTCHA和其他人类验证机制的目的不一定是防止bot完全使用您的服务,而是要减少使用您的服务的bot的数量以及攻击者尝试新攻击的速度。您正在为需要手动干预或投入大量资源的任何攻击添加一个步骤;无论哪种方式,您都在增加攻击者尝试一次攻击的时间,并限制他们可以尝试同时进行攻击的绝对数量。如果攻击者需要首先解决50个不同的reCAPTCHA,则它们无法立即启动50个客户端并立即发起50个攻击。这个想法使攻击变得更加困难和缓慢,而不是完全不可能,它是大多数安全系统和模式背后的基本概念。

考虑到这一点,与让用户在会话开始时解决单个reCAPTCHA相比,强迫用户对每个请求解决reCAPTCHA的优势不大。我认为用户体验问题比安全性收益要重要。让初始的reCAPTCHA能够使攻击者难以同时发起多个攻击会话,并使用一些简单的用户活动启发法(例如,在很短的时间内提交20个表单提交)来查找并踢出攻击者的攻击会话。创建。