如何防御过多的登录请求?

时间:2010-02-02 22:10:24

标签: security web-applications

我们的团队使用Ruby on Rails构建了一个Web应用程序。它目前不会限制用户进行过多的登录请求。我们想做一些失败的尝试,主要是为了保护自动机器人,我们想暂时忽略用户的登录请求。

以下是我的问题:

  1. 如何编写可能对我们网站提出过多请求的程序或脚本?我需要它,因为它可以帮助我测试我们的Web应用程序。

  2. 如何限制在一段时间内进行一些不成功登录尝试的用户? Ruby on Rails是否有内置的解决方案来识别请求者并跟踪她是否提出了最近的请求?如果没有,是否有一般方法来识别请求者(不特定于Ruby on Rails)并跟踪请求者的活动?我可以通过IP地址或cookie或我可以从她的机器收集的其他信息来识别用户吗?我们还希望我们能够区分普通用户(不常见的请求)和自动机器人(经常提出请求)。

  3. 谢谢!

3 个答案:

答案 0 :(得分:2)

我看到的一个技巧是在登录表单中包含表单字段,通过css hacks使其对用户不可见。

自动系统/机器人仍​​会看到这些字段,并可能尝试用数据填充它们。如果您在该字段中看到任何数据,您立即知道它不是合法用户并忽略该请求。

这不是一个完整的安全解决方案,而是一个可以添加到武器库中的技巧。

答案 1 :(得分:1)

关于#1,有许多自动化工具可以模拟大量发布到给定的URL。根据您的平台,像wget这样简单的东西就足够了;或者某种复杂(相对而言)的脚本,要求UserAgent连续多次发布给定的请求(同样,根据平台,这可能很简单;也取决于任务1的选择语言)。

关于#2,首先考虑一个人手动触发多次尝试的较小问题。此类实例通常共享一个会话(即实际的Web服务器会话);您应该能够基于这些会话ID跟踪失败的登录,如果失败尝试的数量突破某个阈值,则会导致早期失败。我不知道有任何插件或宝石专门做这件事,但即使没有,也应该足够简单来创建解决方案。

如果会话ID不起作用,那么IP和UserAgent的组合也是一种非常安全的方法,尽管使用代理的个人可能会发现自己被这种做法不公平地阻止(这是否是一个问题在很大程度上取决于您的业​​务需求)。

如果攻击者是恶意攻击者,您可能需要查看使用防火墙规则来阻止他们访问,因为他们可能会:a)使用代理(因此发生IP轮换),b)在探测期间不使用cookie,和c)用UserAgent字符串不好玩。

答案 2 :(得分:1)

RoR提供了A Guide to Testing Rails Applications中描述的测试应用程序的方法。简单的解决方案是编写这样的测试,其中包含一个循环发送10(或您定义为过多的任何值)登录请求。该框架提供了发送HTTP请求或伪造它们的方法

没有多少人会滥用您的登录系统,因此只记住登录失败的IP地址(一小时或您认为足够的任何时间段)就足够了,而且不需要存储太多数据。除非一些黑客能够访问大量的IP地址......但在这种情况下,我猜你需要更多/更严格的安全测量。