2009-10-27 69 views
3

我想建立一个登录系统的Ruby on Rails的,就像这样一个我应该限制尝试登录rails吗?

http://visionmasterdesigns.com/tutorial-create-a-login-system-in-ruby-on-rails/

在安全性方面,我应该限制的尝试,用户可以有,如果他们得到他们的用户名登录错误?

此外,登录的基本步骤似乎是:

  • 认证的用户名和密码,防止那些在数据库
  • 如果真实的用户名和密码,过滤器之前创建一个会话变量
  • ,以便页要求登录被保护。

还有什么我应该考虑的吗?

回答

8

是限制每个ip(不是每个会话)的登录尝试次数会增加安全性。

你知道Rails已经有几个认证系统吗?没有必要重新发明轮子。
这是一个不完整的列表。

如果你不希望使用任何,你可以把他们在做什么的例子。

编辑2013
以上所提供的库是不是最新的了,而且在新的应用程序使用他们,我不能推荐。看看devise

+3

“每个IP”在这里是关键。没有这些,你已经对用户引入了一个微不足道的拒绝服务攻击。 – 2009-10-27 16:55:47

+3

还有设计:http://github.com/plataformatec/devise/ – Mike 2009-10-27 17:43:04

+0

验证链接是错误的。应该是http://github.com/binarylogic/authlogic – Jim 2009-10-27 21:01:22

0

另一个考虑因素应该是拒绝服务攻击。将动态页面的请求数量限制在合理的范围内会使恶意用户无法取下您的网站,因此难以执行。在帮助解决密码破解问题的同时,这还有助于防止用户以非预期的方式操作网站数据,这可能会造成安全风险(可能是因为数据损坏)。

如果你决定使用这种方法,你应该尝试找到一个很好的支持模块来帮助你做到这一点(而不是自己动手)。

1

另一种方法是使用机架。您可以跟踪IP在数据库,memcached,redis,东京内阁等存储登录尝试的一段时间内访问登录页面的次数。然后拒绝用户访问该页面,如果它们超过了一组定义的时间间隔的配额。

Damien建议Authlogic。 Authlogic是我最喜欢的Rails认证系统。它非常全面和适应性强。 Authlogic有很多现有的模块,我相信你可以利用其中的一个模块让Authlogic为你工作。

2

首先,限制每个IP的登录页面。在登录页面上使用invisible captcha system。然后,您应该为每个IP设置登录限制,但是您还应该将每个用户的登录限制作为阻止僵尸网络免遭来自多个IP的暴力破坏的最后手段。如果尝试强制他们的密码被发现,则发送电子邮件给用户。如果有人尝试使用一堆不同的IP地址,请勿发送大量重复的电子邮件。僵尸网络可以做一些严重的垃圾邮件,否则,更糟糕的是,会在垃圾邮件文件夹中产生一条重要消息。请务必提及他们可能想更改密码,和/或升级其实力。

如果您将IP登录限制设置为高限。很多地方使用三次罢工,你出去了。这是坚果和用户不友好的。它应该至少有十个或更多的现实性,当你触及它时,你应该得到一个基于时间的禁令,而不是“呼叫客户支持”禁令。没有人会在十次尝试中暴力破解密码。因此,我建议每IP登录限制为10,每用户登录限制为1,000到10,000(足够高以阻止拒绝服务攻击,但低到僵尸网络不太可能破解密码) 。对于系统管理员/随叫随到的传呼机,您应该有一些警告,即在您工作之前有一个僵尸网络会在您达到该阈值之前触发很长时间。 (保持所有用户和个人用户失败的登录次数,进行滚动平均,如果超过任一阈值都会发出警报。请记住,如果某人拥有足够多的用户列表,则至少有一个帐户在整个帐户用户基数与攻击一个帐户的成功概率大致相同。)

在防火墙处阻止明显的攻击者。一段时间后禁用。一定要做到这一点,以便客户支持可以解除某人的禁令,但要确保禁令与攻击有关。你不应该解锁一个试图破解二十个不同用户登录的人。当然,这里的判断是因为脚本小子与被僵尸网络接管的非故障家庭成员和奶奶确实可以设法让自己的IP被禁止。

如果你真的有时间去做所有这些,你将拥有一流的登录表单。我怀疑你需要那么多。