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