我正在使用 perl 处理登录表单。我希望在 30 分钟内限制 3 次无效登录尝试。我应该以哪种方式使用。给我一些想法,在哪里存储无效的登录尝试。
问问题
310 次
1 回答
0
你有几个不同的选择:
Cookies - 最不安全,因为不同的浏览器、清除 cookie 等都会影响这一点。不推荐,但为了完整性而列出。
数据库 - 如果您使用的是数据库,那么您可以创建一个记录每次失败登录尝试的表。在此表中login_attempts
,您记录以下值:date
、username
。然后在任何尝试登录期间(伪 SQL)SELECT COUNT(*) FROM login_attempts WHERE username = '$the_user_name' AND date BETWEEN '$now' AND '$now-30m'
。如果返回值 >= 3,则拒绝登录。确保在用户名和日期降序上创建聚集索引。如果您担心空间问题,那么您可以有一个每晚运行的作业,并删除日期早于 8 小时的任何记录。(虽然保留完好,但它可以用作审计日志。)
文件系统——这个选项太拜占庭了,我不打算深入描述它,假设你已经有某种数据库后备存储。如果你必须走这条路,那么它看起来像上面的数据库解决方案,没有 SELECT 语句,并且可能涉及用户名作为目录,其中包含每个登录尝试的文件,并且 (mtime + 30m < now) 必须是true 允许成功登录。当然,您需要确保为磁盘启用了 mtime,或者在文件中记录时间。
于 2012-11-30T04:32:15.053 回答