【发布时间】:2014-07-26 02:15:43
【问题描述】:
我和我的团队正在用 PHP5.5 编写一个 Web 应用程序,其中的数据库(除其他外)具有用于用户身份验证的典型用户名和密码查找。
我们正在寻找防止超过相对数量(例如 8 次)错误登录的方法。这是一个适用于大约 7000 名学生的网络应用程序,当他们在 4 个校园网络中的一个上时,他们都将共享相同的传出 IP 地址。目前,失败的登录作为时间戳和 IP 地址以及尝试的用户名(外键)记录在表中,如果用户名不正确,则记录为 NULL。
我们已经想到了一些方法,但都存在安全漏洞或问题:
存储用户代理字符串:学校中的许多计算机都是标准化的,并产生相同的用户代理字符串
存储本地/网络 IP 地址:目前没有可靠且有效的评估方法
给每个用户一个唯一的 ID 并存储在 cookie 中:可以轻松刷新会话、清除缓存、不同浏览器等。
如果有某种方法可以使用 PHP 或 MySQL 可靠地识别小网络地址后面的用户,理想情况下,我们会比较最近从该地址登录尝试的次数。这样我们就可以锁定(服务器端)那个用户。
我想知道拥有较大用户群的网站使用哪些方法有效。
【问题讨论】:
-
锁定每个帐户,而不是每个 ip。问题解决了。
-
我没有看到任何网站,即使是主要的托管服务提供商,也没有选择自动执行此操作。他们启用警报,然后手动阻止 IP 地址。
-
“给每个用户一个唯一的ID并存储在cookie中:可以轻松刷新会话,清除缓存,不同浏览器等。” - 实际上,cookie可以被清除;另一方面,会话是服务器端的,对用户来说是唯一的。
-
@Fred-ii-,用户可以清除存储会话ID的cookie,这将强制Web服务器为用户生成一个新会话。与使用 cookie 的问题相同。
-
@David 旁注:stackoverflow.com/a/1085792
标签: php mysql pdo brute-force