Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在用户登录页面中防止PHP/Javascript会话滥用_Javascript_Php_Mysql_Session_Authentication - Fatal编程技术网

在用户登录页面中防止PHP/Javascript会话滥用

在用户登录页面中防止PHP/Javascript会话滥用,javascript,php,mysql,session,authentication,Javascript,Php,Mysql,Session,Authentication,我在当地一所大学攻读网络开发学位,目前正在参加网站安全课程。获得了一个任务,可以创建一个简单的登录页面,根据数据库表清理和测试用户名/密码(哈希),如果他们尝试3次失败,则阻止他们登录5分钟 技术方面(例如使用php会话)没有问题,但我想知道除了根据用户/密码表检查哈希密码之外,还有什么更分层的防御措施 在跟踪失败尝试次数的情况下,我考虑的是一个会话变量,它将unix时间戳和ip地址作为令牌,以唯一标识用户并记录每次失败的尝试。在第四次重新加载开始时(尝试3次失败后),我们根据日志表检查存储的会

我在当地一所大学攻读网络开发学位,目前正在参加网站安全课程。获得了一个任务,可以创建一个简单的登录页面,根据数据库表清理和测试用户名/密码(哈希),如果他们尝试3次失败,则阻止他们登录5分钟

技术方面(例如使用php会话)没有问题,但我想知道除了根据用户/密码表检查哈希密码之外,还有什么更分层的防御措施

在跟踪失败尝试次数的情况下,我考虑的是一个会话变量,它将unix时间戳和ip地址作为令牌,以唯一标识用户并记录每次失败的尝试。在第四次重新加载开始时(尝试3次失败后),我们根据日志表检查存储的会话令牌。如果我们得到3个匹配到该令牌的匹配项,那么我们非常确定它是同一个访问者,并且可以向访问者显示“对不起!5分钟后重试”(或类似)

但我的印象是,关闭浏览器,然后再次打开该网站,将导致生成新的会话令牌。如果一个潜在的攻击者注意到了,他会想出如何绕过3击令牌检查。同样的问题也会出现在偷偷摸摸的情况下,并将令牌存储在浏览器的本地存储中——狡猾的用户会知道如何清除这些令牌

我是否过度考虑了我的担忧(假设你能理解我的想法)?有没有一种切实可行的方法来分层防御用户登录,而不使用精明的用户或脚本小子可以绕过的东西?或者对数据库进行检查哈希就足够了——这是一种KISS原则吗


欢迎并欣赏包含该主题的代码片段(PHP/Javascript)或喜爱的文章链接,以及任何建设性的评论。谢谢你的时间-Jimm

您锁定的是帐户,而不是用户。这是大多数网站所做的,而且是万无一失的。

正如您所说,客户端脚本或变量不会阻止这种行为,因为精明的攻击者可以轻松地通过这些防御。对于健忘的用户来说,它比攻击者更令人烦恼。您需要将此信息存储在数据库中。此外,简单地存储在IP信息和时间戳中是不可靠的,因为有人可以很容易地请求一个新的IP地址。同样,这只是用户的另一个痛苦,而不是攻击者的痛苦

与这里的另一个答案一样,防止多次登录的最佳方法是防止该用户的帐户尝试更多密码。这种方法的安全性设计是为了防止知道特定用户名的攻击者强行输入密码。但是,这并不能阻止用户使用错误的凭据,因为错误的用户名不会被记录为尝试。此外,这允许用户仅通过使用用户名进行错误尝试就可以关闭另一个用户配置文件。这是您需要使用用户名信息记录IP信息的地方,但它涉及到检测与他们通常使用的IP地址不同的IP地址,并提示他们确保此设备是可信的(或类似的)。这显然似乎超出了你的问题范围,但如果你能胜任的话,请随意处理


我觉得,最好的方法是编写一个脚本,每当用户点击“提交”按钮登录时,您都会检查数据库中以前的时间戳和登录尝试次数(重置后应该为0)。每次用户尝试使用错误凭据登录时,更新时间戳和登录尝试次数。经过多次尝试后,向数据库发送一个“true”值或其他信息,以表明此帐户在某个时间段内处于锁定状态,该时间段(以5分钟为单位)为时间戳+5分钟。每当用户尝试新登录时,如果该惩罚时间戳尚未发生,则拒绝用户尝试登录。时间戳还可用于查看用户是否同时多次登录您的页面。只需检查当前时间戳是否与旧时间戳比较接近,如果比较接近,则拒绝尝试。

会话始终基于cookie。阻止会话cookie,或者尝试几次就将其删除,这样您就可以继续在服务器上运行。你必须阻止IP,没有其他半可靠的方法。好问题,我希望有人对此有一个好的答案