Rails:在视图中执行此操作是否安全?

时间:2012-06-30 16:52:55

标签: ruby-on-rails ruby security

我的模型tag的属性为title (string)

tag属于_ documenthas_many :throught关联的模型。

在文档#show视图中,我需要显示与该文档关联的所有标签,所以我这样做:

%p= raw @document.tags.map{|t| link_to t.title.prepend('#'), t}.join(', ')

考虑到用户可以创建标签,这是否安全?

如果不安全,我怎样才能达到相同的效果?

谢谢。

3 个答案:

答案 0 :(得分:0)

通常,所有逻辑(或尽可能多的)都应该移动到帮助者或模型。我不会说这是“安全”或“不安全”,但总的来说这是一种良好的做法。

答案 1 :(得分:0)

是的,标签的标题在成为链接的内容之前将被转义,因此即使其中有HTML,它也会被渲染,而不是原始输出。在没有转义的情况下输出输出的是join产生的字符串,这很好。

答案 2 :(得分:0)

在这种情况下,它是安全的,因为link_to将转义其参数,但为什么要承担风险(可能会在几个月内修改块的内部等等),使用{{ 1}}:

safe_join

或者使用我的rails_join“gem”,您可以安全地执行%p= safe_join @document.tags.map{|t| link_to t.title.prepend('#'), t}, ', ' 而无需join