Rails – erbファイルでの改行の反映

概要

  • \nなどの改行コードを含む文字列をhtml.erbファイルで表示させると改行が反映されない
  • 改行コードを<br>に置換してhtml_safeで表示させると改行は反映される
  • しかしながら、この場合は他の特殊文字もそのまま表示されるのでXSSに対して脆弱
  • そこで以下の手順をとる
    1. まず特殊文字をエスケープ
    2. 改行コードを<br>に変換
    3. html_saferawで表示

改行コードは反映されない

改行コードを含む文字列をerbファイル中<%= ... %>で表示させても、HTMLで解釈されないので改行されない。

<br>タグに変換してもエスケープされる

erb側のセキュリティー対策のため、HTMLの特殊文字はエンティティ―でエスケープされる。なので改行コードを<br>に変換するとそのままタグが表示される。

html_safeやrawならタグとして機能する

html_saferawを使うと、タグをタグとして解釈してくれる。

この場合XSSに対して脆弱

ただし上記の方法では、<br>以外のタグも機能してしまうので、XSSに対して脆弱。

エスケープしてから改行コードを変換

以下の手順なら、改行コードから変換された<br>以外はエスケープされる。

  1. まずh関数で特殊文字をエスケープ
  2. その後改行コードを<br>タグに置換
  3. その結果をhtml_saferawで表示させる

ヘルパーにしておくと便利

上記の処理をヘルパーとして定義しておくと汎用的に使える。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です