Rails安全问题

时间:2011-05-23 01:20:13

标签: ruby-on-rails ruby security

我主要是Java程序员,实际上我们不必担心php甚至rails开发人员不必担心的许多安全问题。我们不得不担心它们,但我认为我们的工作实际上要容易得多。你只需使用Java(那里已经有很大的奖励积分)并使用Spring和Spring安全......你基本上已经完成了。在这方面,Java和servlet实际上非常好。

现在我正在使用Rails,我认为我最害怕的最大安全问题是参数 - 两者都来自控制器(因为它们是动态哈希,与SpringMVC不同)并且具有在表格中包含更多隐藏的值。

但这让我思考 - 在创建新模型甚至更新模型时,你必须要小心你所接受的。如果你只是盲目地将参数传递给模型,就会发生不好的事情。事实上,如果你不太小心,可以改变用户角色和东西之类的东西。

这几乎就像我想手工编写setter代码,以确保它不会覆盖不应该的东西。即使有一个框架机制来处理这个......我仍然想要测试每个冒险的模型属性,以确保它不会被创建和更新覆盖。

尽管Java对生产力的反应很差,但感觉它能更好地处理这些东西。

无论如何,我的问题是 - 使用rails处理常见安全陷阱/问题/陷阱的最佳资源/提示/建议是什么 - 特别是面向习惯于在更有状态的环境中工作的Java / Spring开发人员。

更好的是,每隔一段时间经历一次好的清单会是什么?

最后,你会建议做什么测试以确保事情稳固?

2 个答案:

答案 0 :(得分:3)

至少在没有经过适当检查的情况下将数据分配给模型对象时,请查看attr_accessible声明;它只允许通过批量分配指定指定的属性:

user = User.new(params[:user])
user.approved = params[:user][:approved]
user.role     = params[:user][:role]

您可能会发现Ruby on Rails 3rd edition书的整个第27章都很有用。 (我还没有更新我的4th Edition书籍,不确定从新书中推荐哪一章。:)

答案 1 :(得分:1)

我不使用ActiveRecord(我使用DataMapper),但作为一项规则,我从不进行批量分配,而且我总是明确地只传递我想要更改的属性。 Rails 3默认为转义视图中的所有内容,除非您明确地将该数据输出到.erb中。

另外,如果你需要使用SQL来解决某些问题,那么ActiveRecord对你的帮助并不是很大。您必须自己转义输入,这可能会使您面临人为错误的风险,从而允许在查询中执行任意SQL。 DataMapper的底层DataObjects连接支持开箱即用的预处理语句,事实上,它实际上需要更多的工作来避免使用它们。

Rails 3也默认启用CSRF保护。它还默认使会话cookie成为HTTP,这使得它们更难通过JavaScript窃取。

我实际上认为,除了鼓励使用群发作业的Rails之外,你的安全性已经很好了。