1

我目前正在加强我的网络应用程序的安全层,并且我对登录暴力保护的实施有一些疑问:

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

  • 关于系统范围计数器的相同问题(为了在分布式蛮力尝试的情况下触发登录锁定或限制......)?我认为这里的持久性更为关键,但它也意味着每次登录时都需要查询/写入。

  • 检测到的登录蛮力尝试的适当返回响应是什么?我应该返回一个 404 错误,一个 503 服务不可用?或者甚至通过 IPTables/Netfilter 通过 DROPing 甚至 TARPITing 攻击者 IP 来更深入?我说的是真正检测到的蛮力尝试,而不是用户因为不记得他的通行证而导致某些登录失败的情况。

我原本以为一个缓存存储(APC/Memcache)就足以存储计数器,但我担心缓存会因为什么原因而失败,从而使这个防御层失效。

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

4

1 回答 1

0

首先,您必须确定数据的正确范围,然后为速度和优化所困扰。

正如您所说,缓存存储可能会失败。这清楚地表明您的数据具有比缓存更广泛的范围。因此,您不应将它们存储在那里。数据库是一个不错的选择。

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

至于您的第三个问题,对检测到的蛮力尝试的响应类型无关紧要。重要的是时间:例如以 20 秒的延迟响应。这应该足以在此生中使暴力破解成为不可能。

于 2012-04-11T08:50:09.583 回答