白名单重述了代币,以避免要求用户生成新的代币,有更好的解决方案吗



我有一个网站,它有一个带有摘要的表单。该表单有很多服务器端验证,无法移动到客户端,因此用户通常需要提交带有相同repatcha令牌的多个表单。问题是,repatcha不太适合多次验证。

根据谷歌的重述文档:

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

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

因此,为了让表单拥有流畅的用户体验,而不是每次用户提交未通过服务器端验证的表单时都要求再次填写captcha,我要么需要将captcha令牌验证推迟到服务器端验证结束(这会减慢服务器的速度(,要么我需要将capatcha令牌列入白名单,例如3分钟。然而,将captcha列入白名单3分钟意味着有人可以制造一个攻击我网站3分钟的机器人。。。

我觉得上面的解决方案可能是安全方面的一个折衷方案,所以我想知道常见的做法是什么,或者你们是否有更好的解决方案。谢谢

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

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

考虑到这一点,与让用户在会话开始时解决单个reCAPTCHA相比,强迫用户在每个请求上解决一个reCAPTCHA几乎没有什么优势;我认为,用户体验方面的担忧超过了安全方面的收益。让最初的reCAPTCHA完成它的工作,使攻击者难以启动多个同时的攻击会话,并使用一些简单的用户活动启发法(即在几秒钟内提交20个表单(来找到并踢出他们创建的攻击会话。

相关内容

  • 没有找到相关文章

最新更新