レッスン 4
よくある HTML エンティティの誤り
二重エンコード、decode-as-sanitize、空白バグを避ける。
エンティティバグは「ページ上の文字がおかしい」ように見えますが、パイプライン順序や不可視文字から来ることが多いです。
二重エンコード
すでにエスケープ済みコンテンツの再エンコードが最も頻繁な問題です。症状:
- ユーザーが © の代わりに
©を見る - 検索がレンダリングテキストにリテラル
<を見つける
入力が 生ユーザーテキスト か 事前エスケープ保存 か常に把握してください。
decode を sanitize とみなす
<script>alert(1)</script> をデコードすると <script>alert(1)</script> というテキストが得られます—レンダラーがタグを解釈するなら、sanitize なしで HTML に挿入しても依然危険です。
検査と編集のためにデコード。信頼できない HTML をレンダリングする前に別途 sanitize。
スペースと nbsp の混同
は ノンブレークスペース(U+00A0)であり、通常スペース(U+0020)と同じではありません。レイアウトバグ、コピペ不一致、文字列比較が静かに失敗します。
デバッグ時は nbsp とタブを可視化するプレビューを使ってください。
文脈に誤ったエンティティ
HTML では < のエンコードが不可欠。安全のためすべての ASCII 文字をエンコードすると CMS フィールドが読めなくなり全文検索が壊れます。出力形式が要求するものだけエスケープ—それ以上は不要。
無効な数値エンティティ
� や不完全な &#xZZ; のような不正な参照は、バッチ処理中に黙って通過させず、明確にエラーとして報告すべきです。