おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

h以外のサニタイズ系メソッド

Rails2.0からいろいろ追加されたみたいです。メモ。

strip_tags

タグを全部取り除く。

strip_tags("Strip <i>these</i> tags!") # => Strip these tags!

strip_links

リンクのみ(つまりa要素だけ)取り除く

strip_links('<a href="http://www.rubyonrails.org">Ruby on Rails</a>') # => Ruby on Rails

sanitize

あらかじめ出力可能であると定義されているHTMLタグとその属性のみを出力する。

デフォルトで許可されているのはこれだけ。

ActionView::Base.sanitized_allowed_tags
#=> {"del", "dd", "h3", "small", "big", "sub", "tt", "a", "ul", "h4", "cite", "dfn", "h5", "kbd", "code", "b", "ins", "img", "acronym",
# "h6", "sup", "pre", "blockquote", "dt", "br", "p", "strong", "div", "samp", "li", "ol", "var", "em", "h1", "address", "i", "abbr", "h2", "span", "hr"}

ActionView::Base.sanitized_allowed_attributes
#=>  {"name", "href", "cite", "class", "title", "src", "xml:lang", "height", "datetime", "alt", "abbr", "width"}

table要素, tr要素, td要素とid属性,class属性,style属性だけ許可する

sanitize @article.body, :tags => %w(table tr td), :attributes => %w(id class style)

configでデフォルトを指定できる。

Rails::Initializer.run do |config|
  config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
end

sanitize_css

style属性中のcssサニタイズするメソッドらしい。

view以外で使いたい場合

id:moroさんのこちらの記事が参考になります。

Rails 2.0のサニタイザーをビューテンプレート以外から使う - moroの日記