白名單逸出
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
預設允許的HTML標籤和屬性如下:
ActionView::Base.sanitized_allowed_tags
=> #<Set: {"strong", "em", "b", "i", "p", "code", "pre", "tt", "samp", "kbd", "var", "sub", "sup", "dfn", "cite", "big", "small", "address", "hr", "br", "div", "span", "h1", "h2", "h3", "h4", "h5", "h6", "ul", "ol", "li", "dl", "dt", "dd", "abbr", "acronym", "a", "img", "blockquote", "del", "ins"}>
ActionView::Base.sanitized_allowed_attributes
=> #<Set: {"href", "src", "width", "height", "alt", "cite", "datetime", "title", "class", "name", "xml:lang", "abbr"}>
如果需要增加,可以在config/application.rb
中新增,例如:
config.action_view.sanitized_allowed_tags = %w[table tr td]
config.action_view.sanitized_allowed_attributes = "rel"
它会砍掉script这个tag,以及onXxxx之类的attribut,你没有机会执行javascript,但是你还可以塞一些div或iframe之类的tag让你的版面烂掉。
所以我们需要自定义一个html filter,可以自由的指定我们放行的那些tag。网上发现了这个sanitize.rb,完美的帮我们实现愿望。如何使用:
所以我们需要自定义一个html filter,可以自由的指定我们放行的那些tag。网上发现了这个sanitize.rb,完美的帮我们实现愿望。如何使用:
第一行:
ruby 代码
- def sanitize( html, okTags='a href, b, br, i, p' )
okTags代表就是允许的tag,目前有a,b,br,i,p之类的tag,如果输入<iframe>xxx</iframe>之类的不允许的code,就会出现
xxx.不允许的结果都将被砍掉。如果想增加span,或font这样的tag,则可以:
ruby 代码
- def sanitize( html, okTags='a href, b, br, i, p, span, font' )
a href之间没有用逗号隔开,是代表sanitize允许a这个tag使用href这个attribute,比如:
<a href="http://blackanger.iteye.com" _fcksavedurl="http://lightyror.blogspot.com" target="_blank">Haha</a>
只会出现: <a href=http://blackanger.iteye.com>Haha</a>,只有href这个属性可以保留,其他的被无情的砍掉。当我们输入这样的代码:
<a href=http://blackanger.iteye.com>Haha
会自动帮你补齐tag:
<a href=http://blackanger.iteye.com>Haha</a>