5

我正在使用登录失败的身份验证系统。
如果用户登录失败,数据库中的尝试次数会增加,如果达到定义的限制,PHP 会将会话验证码变量设置为 true。
因此,当用户(或垃圾邮件机器人)再次获得登录页面时,由于 session 变量,将显示验证码表单

但由于垃圾邮件机器人最终可能会删除会话 cookie 并重试,因此这可能无效。

我应该改用数据库解决方案吗?你将如何实现这个(有/或没有数据库)?

4

3 回答 3

6

垃圾邮件机器人可以相当容易地绕过会话限制,因此必须在数据库中完成才能有效。垃圾邮件机器人也可以在每个请求中更改其 IP 地址,尽管这很难实现。

您必须在用户表中放置一个从 0 开始的登录尝试字段,当他们输入密码错误时将其递增,并在成功登录时将其重置为 0。当有人尝试以登录尝试 > 5 的用户身份登录时,您会将他们带到另一个带有验证码的页面,他们必须正确输入验证码(即使密码错误)。

于 2012-09-02T11:40:14.043 回答
0

我会简单地记录用户的会话变量,然后计算为 IP 地址提交表单的次数。

于 2012-09-02T11:40:06.107 回答
0

从我的角度来看,如果他/她尝试登录您的 PHP 页面失败,则只需在他/她尝试登录时获取用户名,然后将用户名存储在 Login_attempts 表及其 IP 地址中。增加失败的尝试列并检查它是否大于你的阈值,比如说 5,如果它失败了,那么添加验证码,并并排检查 IP 是否在一定时间间隔内每次尝试都没有变化,比如说 1 分钟如果失败,则 IP 地址应保持不变,然后登录尝试失败。

为了最好NOSQL or memcache地从数据库中检索快速数据。

于 2012-09-02T12:09:57.993 回答