2014-10-01 103 views
0

我使用私人访问在PHP中构建应用程序。有登录两种方式:在PHP中使用cookie登录安全问题

  • 登录方式:用户名和密码
  • 饼干:饼干记得用散列信息(用户名,盐等)

为了防止机器人做了畜生强制攻击,服务器创建一个会话(一个带有session_start的cookie),在4次尝试之后,用户必须等待5秒才再次尝试。我使用超全局变量$ _SESSION来检查某人尝试连接的次数。

我的问题是关于不允许cookies的用户。在这种情况下,他们不会每4次尝试等待5秒钟。我有点困惑关于防止暴力破解的最好方法:

  1. 在检查一个IP有多少次试图
  2. 或者简单地防止用户在没有会话cookie从连接连接数据库创建一个登录表

感谢,

+0

您的#2无法正常工作,因为* everyone在第一次登录尝试时将拥有* no session cookie *。限制尝试的唯一解决方案是跟踪每个IP;在这种情况下,Cookie根本没有任何作用。 – deceze 2014-10-01 12:51:52

+0

在会话中存储登录尝试是毫无意义的 - 因为我只需要重新开始一个新会话即可。 (和“获得一个新的会话”基本上只需要发送一个不同的随机会话ID。)您应该将该信息存储在用户对象(在您的数据库中)。 – CBroe 2014-10-01 12:53:02

+0

好的,谢谢,我想每个人在第一次尝试时都会有一个会话cookie,因为它是在checkLogin脚本的开头创建的。事实上,一个PHP会话只需要发送一个随机会话,没有想到这一点。在数据库中存储信息看起来不错。谢谢, – Yoan 2014-10-01 13:01:38

回答

-1

我肯定去的基于数据库的解决方案。也许锁定帐户2分钟后,5次失败的尝试,但这只是一个个人决定..但是,你可能不想阻止IPs,因为很多大公司甚至国家沟通使用一个NAT的IP,而不是我锁定该帐户。

+0

您提到阻止该帐户,但是帐户名称是由强力填充的帐户将被阻止?或者你想阻止所有多个输入的帐户名称和泛滥你db? – 2014-10-03 15:37:03

-2
+0

感谢您的链接,我看了一下,看起来正是我需要的。 – Yoan 2014-10-01 13:05:04

+0

您的欢迎@Yoan。太糟糕了,它会降低投票。可能是因为代码是旧的,PDO等应该被使用,但它的目的是要给你一个关于限制登录尝试的想法。顺便说一句:我发现这个链接在这里堆栈溢出在UP投票答案:http://stackoverflow.com/a/17912394/2151104 – 2014-10-01 13:34:13