不管用户限制登录尝试?
我有一个需要用户名和密码的登录系统。 我想在一定数量的失败登录尝试后显示验证码。 什么是实施这个的正确方法? 我在这个网站上阅读过,有些解决方案建议在users表中添加一个'failed-attempts-count'。 但是,我需要失败的尝试不被绑定到某个用户 - 即我希望无论输入的用户名是否存在于系统中都显示验证码。 将这个存储在一个会话变量是好的(我正在使用PHP)? 如果是这样,那么根据需要向会话变量中引入数据是否没有缺点? 我已经有网站上的每个访问者的任何会话ID(无论是否登录),所以我可以创建一个表,将登录尝试与此会话ID相关联......有关最佳/最安全方法的任何想法? 谢谢。
更新:从目前的答案来看,似乎会话ID不是最好的主意,因为黑客可以简单地清除他/她的缓存(但是这真的是一个问题,因为这不会减缓暴力攻击,足以使其无用? )。 另一种选择是通过IP ......但我对内部网或代理下的用户犹豫不决,因为失败的尝试将被共享......我无法真正想到任何其他方法..你能吗?
使用会话ID的危险是,编写暴力攻击的人可以在每次尝试时清除自己的Cookie,从而给他一个新的会话。
请记住,可以使用浏览器之外的脚本语言编写自动化的暴力攻击,这可以操纵为每个请求发送的Cookie。
另一种方法是创建一个包含用户源IP的表格并在那里添加计数器。 这会给使用代理服务器的用户带来不便。 但至少你会发现那些试图反复猜测来自同一地点的密码的人。
更新:在连续的强力尝试中清除cookie不会减慢攻击速度,因为这个过程会自动化并且几乎立即发生。 这些类型的攻击中的Cookie操作相当普遍。 修改cookie不同于清除浏览器的缓存(通常需要一段时间,因为它需要删除一堆文件)。 所有攻击者需要做的是防止发送cookie。
如果黑客关闭浏览器并重新打开它,会话方法将不起作用,所以一张表格存储了失败尝试的次数和最后一次尝试的时间(因此,您可以检查是否说一小时过去了,这样您可以重置计数器)每个用户将是最安全的方式。
您可以使用IP和时间记录所有失败的尝试。 旧的失败尝试会在一段时间后被删除,如果有一定数量的失败尝试给定IP,则显示验证码。
链接地址: http://www.djcxy.com/p/21685.html