https://twitter.com/mpyw/status/1224923891924996099
@mpywさんから学んだことをメモします。
結論
>ヒューマンエラーでXSS脆弱性に結びつくため
・改行したいときはCSSでpre-wrapを当てる
・HTMLを生で出したいときは HTMLString クラスを使う
・基本的には {!! !!} は使用禁止
・メールテンプレート以外では使わない
・HTMLStringを作る場合は、属性値とかテキストとかはかならずe関数でエスケープ
例:PHPでネストした連想配列を の配列に組み立てる
ちなみに
{!! nl2br(e($hoge)) !!}
上記の書き方でもエスケープ処理はされますが、改行しか反映されません。
改行とスペースも反映させたい場合は、下記のようにCSSでpre-wrapあてます。
<div style="white-space:pre-wrap;">{{$message}}</div>
【注意】
<div>
foo
</div>
ではなく
<div>foo</div>
のように詰めるように!
参考文献
この記事は以下の情報を参考にしました。