HTML の属性値に含まれる <
や >
が Chrome 138 から実体参照に自動変換されるとのこと。 Chrome 138 のリリースはベータ版が 2025年5月28日、正式リリースは 2025年6月24日を予定
HTML タグの属性値というのは <html lang="ja">
の lang="ja"
の部分。この中に含まれるのは基本的に文字列になるのだけれど、その中に <
や >
が含まれていると <
や >
に置き換えられるというもの
<!-- 記述された HTML -->
<div id="div1" data-content="<u>hello</u>"></div>
<!-- getElementById('div2').outerHTML -->
<div id="div2" data-content="<u>hello</u>"></div>
この変更は常に適用されるわけではなく outerHTML
innerHTML
getHTML
で文字列として HTML を取得した際に適用される
getAttribute
や dataset
attributes
を経由して属性値を取得する場合はこれまで通り <div id="div1" data-content="<u>hello</u>"></div>
であっても <div id="div2" data-content="<u>hello</u>"></div>
であっても "<u>hello</u>"
が取得できる
まとめ
そもそも属性値に <
や >
を入れることはあまりないはずというのと、フレームワークを使っている限り outerHTML
innerHTML
getHTML
に関しても使うことは少なくさらに属性値の抽出はかなりレアケースだと思うので、そこまで心配しなくて良さそう
HTML を切った張った系の実装をしているシステムに関してはちょっとだけ気にしてみてください
斜め読みして dataset
の中身変えるの影響デカくね、と思ってこの記事を書き始めたのだけどあまり影響なさそうでよかったよかった
元記事ではこれを実装する原因となった脆弱性などの解説へのリンクもあるので興味ある方は見てみてください