在 Rails 3.0.2 中,Array#join
方法默认不会自动将结果标记为 HTML 安全的(HTML safe)。这与 Rails 的 XSS(跨站脚本攻击)防护机制有关。
Rails 3.0.2 中的自动 HTML 转义机制是为了防止 XSS 攻击。当你在视图中输出数组内容时,Rails 会自动转义 HTML 特殊字符,除非明确标记内容为 HTML 安全的。
html_safe
方法array = ['<b>hello</b>', '<i>world</i>']
array.join(' ').html_safe
safe_join
方法(Rails 专用)Rails 提供了 safe_join
方法专门用于安全地连接数组元素:
array = ['<b>hello</b>'.html_safe, '<i>world</i>'.html_safe]
safe_join(array, ' ')
array = ['<b>hello</b>'.html_safe, '<i>world</i>'.html_safe]
array.join(' ')
html_safe
,否则可能导致 XSS 漏洞这种处理方式常见于:
<%# 安全的方式 %>
<%= safe_join([content_tag(:span, 'Hello'), content_tag(:span, 'World')], ' ') %>
<%# 不安全的方式(可能导致XSS) %>
<%= ['<script>alert(1)</script>'].join.html_safe %>
在 Rails 3.0.2 中,理解 HTML 安全性对于构建安全的 Web 应用至关重要。