'.html_safe %>它们似乎都导致在提供的字符串中编码html'/> '.html_safe %>它们似乎都导致在提供的字符串中编码html'/> Ruby on Rails:.html_safe和sanitize()之间的区别 | 所有编程讨论 | zhouni.net

问题 Ruby on Rails:.html_safe和sanitize()之间的区别


我的视图中有两段代码:

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

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

它们似乎都导致在提供的字符串中编码html标签。 它们之间有什么区别,我应该何时使用?


11800
2018-05-14 16:11


起源

@Pavan,我没有。 - lakesare


答案:


这是两种截然不同的方法。

a = a.html_safe 只会标记字符串 a 作为'html_safe'并在之后对其进行处理 (将字符串标记为受信任的安全字符。它将插入到HTML中,而不是 执行额外的逃避。你有责任确保这一点 string不包含恶意内容。这种方法相当于 raw 帮助者的意见。建议您使用 sanitize 代替 这种方法。永远不应该在用户输入上调用它。)

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


16
2018-03-23 08:55