タイガーラック クリエイティブブログ
2024
May
30

【Laravel】改行コード(\n)を認識しながらHTMLタグは文字列としてサニタイズしたい場合の方法

経緯

弊社のシステムをLaravelに移行したということもあり最近、Laravelで実装することが増えました。
お問い合わせフォーム実装時に確認画面で「お問い合わせ内容」や「備考」など自由入力できる項目の改行がなくなってしまうという現象が起きました(bladeファイル)。

上記で起きた問題の解消法を紹介します。

ソースコード

{!! nl2br(e($変数)) !!} を使う

$value = "こちらの商品の\nお見積りを\nお願いします。";

{!! nl2br(e( $value )) !!}
  • e() でエスケープ(HTMLタグを文字列にする)
  • nl2br() で改行(\n)を<br>に置き換える
  • {!! !!}で、<br>だけエスケープをせずに表示

といった処理を行なっています。

{!! !!}nl2br() の組み合わせだけでも表示はされますがe() 関数を使わないとHTMLタグがエスケープがされずスクリプトタグなどが埋め込まれていた場合、XSS攻撃などセキュリティ上の危険が生じます。

e関数は、PHPのhtmlspecialchars関数をdouble_encodeオプションにデフォルトでtrueを指定し、実行します。

まとめ

フレームワークを使うことでセキュリティやメンテナンス性も高まりますが例外的な処理を実装する時は気を付けなればならないなと実感しました。

今回の内容だと記述ミスでe() 関数が抜けてしまうだけでセキリティリスクが高まるため予防策としてBladeカスタムディレクティブで定義しディレクティブ名を決めて使うことでミスなくセキリティも高まるのではないかと思いました。

機会があればBladeカスタムディレクティブの使い方もブログでご紹介させていただきます。

このカテゴリの最新記事

関連記事

SHOP LIST

タイガーラック株式会社

〒577-0056
大阪府東大阪市長堂1-3-14 TOKUYASU Bld.