2012-04-11 75 views
2

我正在硬化我的网络appliocation的安全层,和我有一个登录蛮力保护实施的几个问题:存储首选登录蛮力对策

  • 我应该使用什么样的存储存储每个用户/ IP失败登录的计数器?如果一个简单的APC/Memcache条目足够了,还是需要一个更稳定和持久的存储方法,也意味着在每次登录时都会写入额外的SQL查询或文件?或者甚至将它们存储在会话条目中(我的会话由Memcache处理,所以它们完全相同)。

  • 关于全系统计数器的相同问题(为了触发登录锁定或限制分布式蛮力企图...)?我认为这里的持久性更重要,但它也意味着在每个登录中查询/写入。

  • 对检测到的登录蛮力企图进行适当的返回响应是什么?我应该返回一个404错误,503服务不可用?甚至是通过DROPing甚至通过IPTables/Netfilter对攻击者IP进行深入攻击?我正在谈论一个真正检测到的蛮力企图,而不是一个用户登录失败的情况,因为他无法回忆他的通行证。

我原本以为一个缓存存储(APC /内存缓存),就足以存储计数器,但我担心的是,高速缓存可能会失败是因为什么原因,使得这一防御层是无效的。

对于其他的考虑,我已经阅读了一些不错的帖子,如What-is-the-best-distributed-brute-force-countermeasureNumber-of-attempts-to-brute-force-an-average-password,但随时抛出任何建议,将不胜感激。

回答

0

首先,你必须识别数据的正确范围,然后速度和优化困扰。

如上所述,缓存存储可能会失败。这清楚地表明您的数据的范围比缓存的范围更广。因此,你不应该把它们存储在那里。数据库是一个很好的选择。

现在,如果您关心速度(而且您应该是),现在是优化流程的时候了。你已经有一个缓存层,所以用它来缓存这个额外的读取查询。另一方面,您不应该为额外的更新查询而烦恼,因为这是不影响整体用户体验的特殊情况。

至于你的第三个问题,对检测到的蛮力尝试的响应类型并不重要。重要的是时间:比如20秒的延迟。这应该足以使暴力在这一生中不可能发生。

+0

范围的观点有所帮助,我想我只是得到最好的,并做一个缓存+ MySQL存储。如果缓存失败,那么计数器仍然可以在数据库中使用,但是如果缓存处于启动状态,它将阻止对每个日志记录的系统SELECT读取查询。 – Claaker 2012-04-11 09:13:17