为什么不使用会话而不是数据库进行帐户锁定

时间:2015-01-24 20:41:16

标签: php mysql security login brute-force

我正在构建一个Web应用程序,并正在研究将帐户锁定作为解决暴力攻击的方法。寻找实现这一目标的最佳方式带我到以下链接

1. limited attempts for login and block a users account for a specific amout of time

2. PHP lockout user after 3 failed log ins for 10 minutes

3. Blocking access to the login page after three unsuccessful login attempts

4. How to block user after 3 fail of submiting wrong information

还有更多链接,但他们都说了同样的话:

1. Create Database
2. Store Login Attempt Details
3. Add 1 to number of attempts
4. Set timed session if No of attempts > 3/5

然而这让我想到,为什么以下方法不是更好或至少同样好?

1. Set a session "[No of login attempts]" on failed login
2. Add "1" to "[No of login attempts]" on each failed login
3. Proceed with account lockout if "Session[No of login attempts]" is greater than 3/5

我觉得这更好,因为它很明智。数据库方法增加了不必要的开销,以及管理表的任务。(可能想要删除过去或登录解析时失败的登录详细信息等)

但我没有看到有人推荐这种方法

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

有几件事:

  1. 会话超时。如果攻击者等待的时间足够长,他们的失败数将被遗忘。
  2. 会话可以与Cookie相关联。在这种情况下,如果攻击者清除了他们的cookie,他们将获得一个新的会话ID和一组新的计数器。如果攻击者计算出你的cookie方案,他们甚至可以创建自己的cookie并获得他们想要的多个会话。
  3. 也可以通过网址上的参数跟踪会话。在这种情况下,使用基本URL重试将重置登录尝试。此外,与cookie一样,如果攻击者可以找出您的会话ID方案,那么可以生成大量的。