限制PHP中的用户登录尝试

时间:2009-03-25 00:07:41

标签: php security login captcha brute-force

我看过网络应用程序存在用户登录尝试的限制。

这是安全必需品,如果是,为什么?

例如:您有三次失败的登录尝试,让我们在10分钟内再试一次!!

8 个答案:

答案 0 :(得分:7)

我曾经看过一种创造性的方法......

对于每次登录尝试,失败时,锁定时间会以指数方式增加。

attempt | lockout time
======================
   1    |     2s
   2    |     4s
   3    |     8s
   4    |    16s
   5    |    32s
   6    |    64s
   7    |   128s
   8    |   256s
   9    |   512s
  10    |  1024s

从理论上讲,它可以让用户犯错误,但是一旦它成为“黑客”企图,黑客就会被锁定越来越长的时间。

我自己还没有用过这个,但从概念上讲,我非常喜欢这个想法。当然,在成功登录后,计数器将被重置。

答案 1 :(得分:2)

限制在网站上进行的尝试次数是为了防止对您的网站进行强力(自动)攻击。如果您不限制这些尝试,黑客可以设置一个脚本来猜测密码,直到找到密码,这可能会影响您的Web服务器的可用性。

通常情况下,您可能希望在3次尝试后将用户计时(您提到的时间为10分钟),并在连续6次或9次重复尝试后将其锁定,从而强制用户与您联系以解锁其帐户。这是因为有人可以修改他们的脚本来调整你的超时。

答案 2 :(得分:2)

如果用户可以设置自己的密码,某些bot / kid会尝试使用常用密码列表登录,然后成功。如果他们不了解任何用户,他们会尝试使用admin,simon,rico等常用名称。

只是在会话中标记用户没有帮助,因为他们可以直接删除cookie或查询参数。您需要计算IP和登录名的失败登录尝试次数。也许对IP更宽容,因为它可以在许多用户之间共享。

答案 3 :(得分:2)

澄清 这是对其他答案的完成。例如,使用良好的实施验证码以及使用会话的反暴力机制 提问者将此标记为已被接受,假设机器人无法读取验证码(她几乎正确),因此人们认为它不是一个完整的答案&他们是对的。


使用良好实施的CAPTCHA可能是一种替代方法,可以增强您的应用程序安全性,防止暴力攻击。有一个wide variety of captcha providers可以免费使用,如果你赶时间的话,让我们试试吧。另外请考虑people离开这里说“哦,不!这个验证码不够安全,有时它们也是对的!”

“对于那些不知道的人,CAPTCHA程序可以判断其用户是人还是其他计算机。他们'当您注册Gmail或在某人的博客上发表评论时,您会翻译那些扭曲文本的小图片。他们的目的是确保某人不会使用计算机自动注册数百万个在线帐户,或者。 。“ref

答案 4 :(得分:1)

对于我自己的项目,我写了一个广义的'floodcontrol'库来处理这类事情。

它允许我指定在X时间内可以进行的尝试次数。它允许在短时间内进行一定数量的“宽限期”尝试,以便只捕获真正异常的行为。

我在数据库中记录了一些事情:

  • IP地址(或其前24位)
  • 尝试的操作(即“登录”,“搜索”,“评论”)
  • 尝试的时间
  • 尝试次数(尝试计数器)

对于每次尝试,我查询部分IP地址和操作,如果在某个时间窗口内进行了先前的尝试,那么我递增该尝试的尝试计数器。如果尝试计数器超过允许的宽限尝试次数,那么我检查最后一次尝试是否在现在的X秒内,如果是,则返回false - 因此操作将被阻止(并且用户将被告知在尝试之前等待X秒再次)。如果尝试计数器低于宽限尝试次数,那么我返回true并让它滑动。

如果具有相同IP的人稍后来,则不会获取先前的尝试计数,因为它将在很久以前。

答案 5 :(得分:0)

是的,有必要保护帐户免受复杂的暴力攻击 - 例如,使用机器人和字典文件 - 只是试图猜测帐户密码的人。

答案 6 :(得分:0)

我认为在数据库中设置'失败的尝试'计数器将是最安全和最简单的方法。这样用户就无法绕过它(通过禁用cookie)。当然成功登录时重置。

答案 7 :(得分:0)

正确登录后重置失败的尝试几乎使整个系统毫无价值。

然后,任何注册用户都可以对其他人的帐户和密码进行三次猜测,然后使用他们自己登录来重置计数器,并重复 - 这也可以自动化。因此,例如,普通注册用户可以强制管理员密码。

重置需要由管理员完成,而不是简单地成功登录。

相关问题