function previewContent() {
const input = document.getElementById('input').value;
document.getElementById('preview').innerHTML =
sanitizeHtml(input); // just in case
}
問題点2
ISO-2022-JP
• 古き良き日本の文字コード
• 特定のバイト列が出現すると2バイトで1文字を構成するモードに
• 例: [0x1B] $ B
• [0x1B] ( B が出現すると通常モード(ASCII)に戻る
A A A [0x1B] $ B % F % 9 % H ! z [0x1B] ( B B B B
※制御文字や空白は [0xXX]で表現
AAAテスト★BBB
decode
なぜ無効にされた?
• ありえないバイト列で特殊文字が生成されていたから(だと思う)
• 自動選択でXSSが刺さるリスクが高かった
[0x1B] $ B [0x01] [0x03] [0x1B] ( B
[0x1B] $ B [0x01] [0x07] [0x1B] ( B
[0x1B] $ B [0x01] [0x08] [0x1B] ( B
[0x1B] $ B [0x01] [0x1D] [0x1B] ( B
[0x1B] $ B [0x01] [0x1F] [0x1B] ( B
[0x1B] $ B [0x01] [0x3D] [0x1B] ( B
q"
q&
q'
q<
q>
q\
結局、明示的にISO-2022-JPをcharsetに指定したときのデコードはこの動作のままでEOLを迎えた