在PHP中通过IP地址和登录尝试次数限制用户访问

10 浏览
0 Comments

在PHP中通过IP地址和登录尝试次数限制用户访问

我想通过限制用户尝试次数来限制他的操作,但我不确定是使用JavaScript还是PHP来实现,以及具体的方法。

(在相同的表单页面请求之间如何保存数据?是通过使用全局变量还是最好使用会话?);

此外,我如何根据IP封禁用户?

0
0 Comments

问题的原因是无法通过JavaScript限制用户的IP和登录尝试次数,因为攻击者可以修改JavaScript代码。全局变量在页面调用后不会保留,使用会话是可能的,但攻击者也可以停止它。解决方法是将IP地址与时间戳和失败尝试计数器存储在数据库中。每当有人尝试登录时,从数据库中提取此IP地址的计数器,计算当前时间 - 限制尝试次数的时间。如果找到一个条目,则检查是否尝试次数过多,并拒绝登录。如果没有,检查凭据-如果用户验证成功,则重置计数器,如果不成功,则将计数器加一,并将计时器更新为当前时间。

0
0 Comments

在这里,JS没有任何作用。

全局变量和特别是会话也是如此。

“我如何在相同的表单页面请求之间保存数据?”

你有很多选择 - 文件、数据库、共享内存。我建议使用数据库。

“我如何通过他们的IP禁止人们?”

检查他们的IP,然后按你所谓的“禁止”做任何事情?

你对会话有什么大的问题?

在这种情况下,会话很容易被伪造。只需清除你的cookies,你就开始了一个新的会话。在这种情况下,使用会话很容易被破坏,所以毫无意义。

然而,关于会话的问题是“如何在相同的表单页面请求之间保存数据”。我认为会话对于这个问题是一个可行和被广泛接受的解决方案。

我可以使用会话来跟踪用户在网站上的点击或导航吗?或者不安全吗?

0
0 Comments

限制用户IP和登录尝试次数的问题出现的原因是为了增加系统的安全性。为了解决这个问题,我们可以使用PHP来实现,因为JavaScript是在客户端执行的,并且可以很容易地被篡改。另外,JavaScript无法获取客户端的IP地址。

在PHP中,我们可以使用$_SERVER['REMOTE_ADDR']来获取客户端的IP地址。为了跟踪登录失败的次数,我们需要使用数据库。当登录失败时,可以将其记录在一个表中,例如INSERT INTO failed_logins (user, ip) VALUES ('$username','{$_SERVER['REMOTE_ADDR']}')。然后可以使用SELECT count(*) as attempts FROM failed_logins WHERE ip = '{$_SERVER['REMOTE_ADDR']}'来检查登录失败的次数是否达到了限制。如果attempts大于等于限制次数,则可以将该IP地址加入到banned_ips表中,例如INSERT INTO banned_ips (ip) VALUES ('{$_SERVER['REMOTE_ADDR']}')

为了检查客户端是否被封禁,可以在每个请求处理开始时执行类似于SELECT * FROM banned_ips WHERE ip = '{$_SERVER['REMOTE_ADDR']}'的操作。如果在表中找到了与该IP地址对应的行,则将该请求处理视为被封禁状态。

0