欢迎来到cool的博客
7

Music box

Click to Start

点击头像播放音乐
新博客链接

安全 别用 raw 和 html_safe 应该使用sanitize

之前一直喜欢用  raw html.之后发现这个会引起一些问题。

 raw,它和 html_safe 是同义的。我发现很多人都误解了这两个 helper 的用法,再强调一次它的意思是:

我要裸奔!

Rails 框架本身做了很多安全措施,在默认情况下,template 里的所有字符串都会被过滤:

<%= danger_string %> <!-- 安全 -->

这段代码是安全的,但是这段代码:

<%= raw danger_string %> <!-- 危险 -->

就告诉模板系统关掉了安全过滤,这是非常危险的。通常谈到 raw 的时候都因为要输出 html 内容,这时候应该用 sanitize,这是一个基于白名单的过滤方法:

<%= sanitize danger_string %> <!-- 只要不开危险的标签属性名单就安全 -->

sanitize 可以在方法级别和全局级别设置白名单标签和属性,详细可以看文档 http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

总结:如果你不知道自己知不知道自己在干什么,别用 raw 和 html_safe,用 sanitize。

补充1:helper 里面也要避免 raw,避免在 helper 拼接 HTML 补充2:sanitize 要放在字符串处理链的末尾

返回列表