2024
December
06
【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カスタムディレクティブの使い方もブログでご紹介させていただきます。
このカテゴリの最新記事
2023.07.19
【RPA】PowerAutomateDesktop(PAD)を使ったブラウザ操作自動化
2024.02.15
【PostgreSQL】レプリケーション設定方法
2024.04.12
Excelで特定のURLから保存したファイルを開く時に保護ビューで開かないようにする方法
2023.10.11
【ZOHO CRM API】COQL Queryを使って情報を取得する方法