PHP 中限制用户登录尝试
-
22-08-2019 - |
题
我见过一些网络应用程序对用户登录尝试有限制。
这是出于安全考虑吗?如果是,为什么?
例如: 您已尝试登录 3 次失败,请在 10 分钟后重试!
解决方案
<强>澄清强> 这是一个完成其他的答案。使用一个很好的实现验证码一起使用,例如会话的防暴力破解机制。结果 提问标志着这是公认的假设的验证码是由机器读取(她的几乎右),所以它得到负分,因为人们认为它不是一个完整的答案:他们是对的。的
同时使用一个很好的实现CAPTCHA可能是enpower您的应用程序安全性以防止蛮力攻击的另一种方式。有href="http://woork.blogspot.com/2009/02/10-free-captcha-scripts-and-services.html" rel="nofollow noreferrer">各种各样的验证码提供者的免费提供,让我们尝试简单的方法,如果你在忙乱之中。也请考虑有 的人离开这里说的“哦,不!这件事验证码是不够安全,他们是正确的,有时!” 的。
的
“对于那些你不知道是谁,一个CAPTCHA是程序,它可以告诉它的用户是一个人或另一台计算机。他们”重新您在注册Gmail或离开别人的博客发表评论,他们的目的是要确保有人不使用计算机自动注册了数以百万计的在线账户,或转换变形文字的那些小图片。 “ REF 。
其他提示
我看到这个创造性的方法,一旦...
有关每次登录尝试,失败,锁定时间的增加呈指数...
attempt | lockout time
======================
1 | 2s
2 | 4s
3 | 8s
4 | 16s
5 | 32s
6 | 64s
7 | 128s
8 | 256s
9 | 512s
10 | 1024s
在理论上,它可以让用户犯了一个错误或两个,但只要它出现,成为一个“黑客”的企图,黑客被锁定的时间越来越长的时间段。
我没有用过这个我(还),但在概念上我很喜欢这个主意。当然在成功登录后,计数器被复位。
这是多少次尝试在网站上进行的限制是防止暴力破解(自动)攻击你的网站。如果不限制这些尝试,黑客可以建立一个脚本将密码猜测,直到找到一个,这可能会影响您的Web服务器的可用性。
典型地,可能需要后3次尝试时使用户退出(10分钟为你所提到的),并且将它们锁定后6或9个连续的重复尝试,迫使用户你以便解锁他们的帐户联系。这是落实到位,因为有人可以修改自己的脚本来调整超时。
如果用户可以设置自己的密码,一些BOT /孩子会尝试与常见密码的列表来登录,并取得成功。如果他们不知道任何用户,他们会尝试像管理,西蒙,波多黎各等常见的名字。
有没有帮助,只是标志会话的用户,因为他们可以去除他们的最终饼干或查询参数。你需要有失败的登录尝试两个IP的计数和登录名。也许是用于IP更宽容,因为它可以在多个用户之间被共享。
对于我自己的项目,我编写了一个通用的“洪水控制”库来处理此类事情。
它允许我指定在 X 时间内可以进行多少次尝试。它允许在短时间内进行一定数量的“宽限”尝试,因此只有真正不寻常的行为才会被捕获。
我在数据库中记录了一些事情:
- IP 地址(或其前 24 位)
- 尝试的操作(即“登录”、“搜索”、“评论”)
- 尝试的时间
- 尝试次数(尝试计数器)
对于每次尝试,我都会查询部分 IP 地址和操作,如果之前的尝试是在某个时间窗口内进行的,那么我会增加该尝试的尝试计数器。如果尝试计数器超过允许的宽限尝试次数,则我检查最后一次尝试是否在现在的 X 秒内,如果是,则返回 false - 因此该操作将被阻止(并且用户将被告知在尝试之前等待 X 秒)再次)。如果尝试计数器低于宽限尝试次数,则我返回 true 并让它滑动。
如果稍后有相同 IP 的人过来,则不会获取之前的尝试计数,因为它已经是很久以前的事了。
是的,这是必要的,以保护从复杂的强力攻击的帐户 - 在使用机器人和字典文件 - 到有人只是试图猜测帐户的密码
我觉得把一个“失败的尝试”在DB柜台是去最安全和最简单的方法。这样,用户就不能绕过它(通过禁用Cookie)。重置当然成功登录
重置失败的尝试之后的正确的登录几乎使得整个系统毫无价值。
任何注册用户都可以那么就在别人的账号和密码猜三次,然后登录自己的重置计数器,并重复 - 可以自动,太。因此,一个正常的注册用户可以蛮力管理员密码,例如
复位需要由管理员来完成,而不是通过简单地登录成功。