任何聪明的解决方法,以避免必须到处输入h方法?

时间:2009-08-18 14:45:06

标签: ruby-on-rails security xss

为了使其安全,必须在视图代码中的所有位置键入h方法,这似乎是荒谬的(并且违反了DRY)。

有没有人为此提出一个聪明的解决方法?

4 个答案:

答案 0 :(得分:4)

DHH(Rails的创建者)同意你的意见。 Rails 3默认会转义输出。

答案 1 :(得分:4)

你可以使用Erubis作为你的ERB引擎 - 它确实提供了自动转义功能。他们的基准测试标志着它比ERB快3倍。

http://www.kuwata-lab.com/erubis/

唯一的问题是它只适用于ERB,所以如果你的Haml或其他一些模板语言(比如我们)那么你就是SOL。我过去曾经使用过Erubis并没有遇到任何问题 - 在我们切换到(较慢的)Haml之前。

答案 2 :(得分:3)

您可以使用XSS_terminate过滤进入您应用的数据(保存时),而不是尝试使用h()在最后一秒捕获它。

理论上,这应该是足够的,你不应该做任何其他事情。

如果你想成为偏执狂(在安全方面并不是坏事),你应该同时做到这两点。

答案 3 :(得分:0)

Rails 3方法在视图方面绝对是最好的,因为它明确地跟踪每个字符串的安全性,这最终是您需要的(污点模式),以提供强大的解决方案。

然而,另一种方法是ActsAsTextiled所做的。这是重新定义属性访问器以清理和缓存结果,以便您始终默认获得清理输出。我喜欢这个而不是xss_terminate方法,它根本不会触及用户输入,因此您可以减少用户的投诉,并且数据不会被意外破坏,您可以稍后更改规则你忽略了什么。

我非常喜欢这种方法,我使用Sanitize gem ActsAsSanitiled编写了一个插件。它不像xss_terminate那样为您提供开箱即用的保护,但它也避免了不必要的副作用。在我的情况下,相对较少的文本字段实际上是由用户直接编辑的,所以我更喜欢审核它们并明确声明它们。