Ruby on Rails: .html_safe和sanitize()的区别

19

我的视图里有两段代码:

<%= sanitize('<h3>winter</h3>') %>

<%= '<h3>winter</h3>'.html_safe %>

它们似乎都会将提供的字符串中的HTML标签进行编码。它们之间有什么区别?我应该在什么情况下使用它们?


请注意,.sanitize在Rails 5.1中已被删除(https://github.com/rails/rails/issues/28947) - Hanney
1个回答

29

这是两种非常不同的方法。

a = a.html_safe 只是将字符串 a 标记为 'html_safe' 并在以后对其进行处理 (将字符串标记为受信任的安全内容。它将被插入HTML中,不会执行任何其他编码。您有责任确保字符串不包含任何恶意内容。此方法相当于视图中的raw助手。建议使用sanitize代替此方法。它不应该用于用户输入。)

另一方面,a.sanitize 会对所有标签进行 HTML 编码,并剥离不明确允许的所有属性 (如果需要,可以添加或删除允许的标签和属性)。请注意,默认情况下将对用户输入进行清理,除非您使用raw明确允许了 HTML 标记 (http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/raw),顺便提一下,它使用html_safe将其标记为这样的内容。


3
sanitize('<h3>winter</h3>').html_safe 是多余的吗? - lucas
@lucas 是的,确实如此。 - Jean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接