Sanitize gem remove allowed attributes with colon
Mail gem でパーズしたHTMLを表示するので、XSSを起こさないようエスケープしないといけない。
なんでや!
imgタグのsrc属性に「cid:」値が先頭に入っているのだけど、
Sanitize gemでsanitizeするとsrc属性ごと削除されてしまう。なんでや!
試行錯誤していると「cid:」という文字列が原因で削除されているみたい。
[22] pry(#<MailBodyParser>)> Sanitize.clean("<img src=\"cid:hoge\" >", Sanitize::Config::RELAXED)
=> "<img>"
おっ
属性のプロトコルまでチェックするのか......しゅごい(´・ω・`)
Sanitize::Config::RELAXED
にどのタグ、属性などを許可するというハッシュが入っているのでcid:
を許可するように値を追加する。
Sanitize::Config::CUSTOM_RELAXED = Sanitize::Config::RELAXED.merge(
protocols: {
"img" => {
"src"=>[
'http',
'https',
'cid',
:relative,
]
}
}
)
[2] pry(main)> Sanitize.clean("<img src=\"cid:hoge\" >", Sanitize::Config::CUSTOM_RELAXED)
=> "<img src=\"cid:hoge\">"
おしまい
参考
http://stackoverflow.com/questions/5973552/sanitize-gem-doesnt-like-colon-inside-href-attribute
-
category:
- ruby tags: