通过ip限制用户和php中的登录尝试次数

时间:2011-10-19 15:22:51

标签: php mysql forms

我想用他的尝试次数来限制用户,但我不确定是用javascript还是php ...以及如何完成。 (如何在同一表单页面请求之间保存数据。是使用全局变量还是最好使用会话?); 另外,我如何通过他们的ip禁止人们?

5 个答案:

答案 0 :(得分:2)

总是从PHP做这样的事情 - Javascript是客户端的,可以很容易地操作(完全禁用Javascript会解决这样的事情)。此外,Javascript不知道您的IP。

您可以从$_SERVER['REMOTE_ADDR']获取PHP中客户端的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是> =您的限制,INSERT INTO banned_ips (ip) VALUES ('{$_SERVER['REMOTE_ADDR']}')

要检查客户端是否被禁止,在处理每个请求的开始时,请执行类似SELECT * FROM banned_ips WHERE ip = '{$_SERVER['REMOTE_ADDR']}'的操作 - 如果表中有一行包含该IP,请将请求处理为禁止。

答案 1 :(得分:1)

JS在这里无事可做 以及全局变量,特别是 - 会话。

  

如何在同一表单页面请求之间保存数据

你有很多选择 - 文件,数据库,共享内存。我建议建一个数据库。

  

我如何通过他们的ip禁止人们?

检查他们的IP,然后在“禁令”下做你的意思吗?

答案 2 :(得分:1)

您需要在服务器上执行此操作。如果你用JavaScript做,攻击者可以修改它。

全局变量无法在一个页面调用中存活。会话是可能的,但攻击者也可以阻止它。

在数据库中存储带有时间戳和失败的尝试计数器的IP地址。每当尝试登录时,请将此IP地址的计数器与current time - time in which you want to limit tries结合使用。如果您找到一个条目,请检查是否有太多尝试并拒绝登录。如果没有,检查凭证 - 如果用户有效,则重置计数器,如果没有,则递增1并将计时器更新为当前时间。

答案 3 :(得分:0)

用PHP做。

执行MySQL表attemptLog

+------+------+------+
|  id  |  ip  | date |
+------+------+------+

每次登录尝试失败时,都会将IP添加到attemptLog。 要登录,您需要一个正确的用户名和密码(ofc)和最多,即最后24小时的10次登录尝试。

为此,您可以运行SELECT count(ip) AS loginAttempts FROM attemptLog WHERE ip = $_SERVER['REMOTE_ADDR'] AND date < $today - 24h,然后检查loginAttempts是否超过10。

<强>禁止

要禁止用户,您可以保存其IP并检查是否已设置,如果已设置显示“您被禁止”,则显示正常页面。

答案 4 :(得分:0)