DraperとSanitizeを利用したサニタイズ

はじめに

ウェブアプリケーションを作成していると、ユーザに対してHTMLタグを入力、管理させる場面が度々出てくるかと思います。それは例えば、文字列の装飾であったり、ブログの隅に置かれたウィジットであったりです。

これを行う際に便利なのが、DraperとSanitizeです。

実装

Draperでモデルとビューの間にプレゼンテーション層を追加します。そこでSanitizeを呼び出すことにより、出力されるスクリプトから、問題のありそうなコードを削除して、適切なサニタイズの行われた文字列を取り出すようにします。

以下の例ではContentモデルのbodyというattributeをサニタイズしております。

irb(main):001:0> Content.last.body
=> <span>foooo</span>

irb(main):002:0> Content.last.decorate.body
=> foooo

タグやスクリプトのSanitizeというと、Railsではヘルパーのイメージがあります。ですが、その扱いはセキュリティ上、見栄え以上に重要な位置にございます。なので一箇所でまとめて管理したいなと考える昨今です。結果的に落ち着いたのがデコレータ、といった塩梅でございます。

6月 14, 2018Rails

Posted by poison