ブログのようなアプリケーションを作ろうとしていて、フォームのテキストエリアをリッチテキストエディタ化するために tinymce-rails を使おうとしています。当然そこで入力した内容は HTML になるので、表示するときには html_safe
などでエスケープされないようにしないといけません。
が、やっぱり raw html をそのまま出すのは怖いので SanitizeHelper
の sanitize
メソッド を使ってみることにしました。
sanitize
メソッドはホワイトリスト方式で動作し、許可されているタグの要素や属性以外を削除します。デフォルトでも <script>...</script>
とかを掃除してくれたので、そのまま使ってもいいかと思ったんですが、許可するタグと要素を明示的に設定しました。
ヘルパーを呼び出すときに指定する
ヘルパーを呼び出すときにはこんな感じで指定します。
sanitize @article.body, tags: %w(h1 h2 h3 h4 h5 h6 ul ol li p a img table tr td em br strong), attributes: %w(id class href)
アプリケーションのデフォルト設定として指定する
config/application.rb
にこんな感じで。
config.action_view.sanitized_allowed_tags = %w(h1 h2 h3 h4 h5 h6 ul ol li p a img table tr td em br strong)
config.action_view.sanitized_allowed_attributes = %w(id class href)
カスタム Scrubber なんかも定義できるみたいですが、とりあえず今は不要なのと、眠すぎるのでこれだけ。