HTML ではどの文字をエスケープする必要がありますか? 質問する

HTML ではどの文字をエスケープする必要がありますか? 質問する

これらは XML と同じですが、スペース (  ) が追加されているのでしょうか?

HTML エスケープ文字の膨大なリストを見つけましたが、それらをエスケープする必要はないと思います。何をエスケープする必要があるのか​​を知りたいです。

ベストアンサー1

文書内のテキストコンテンツが期待される場所にテキストコンテンツを挿入する場合1通常はXMLと同じ文字をエスケープするだけで済みます要素内では、エンティティ エスケープのアンパサンド&と要素区切りの小なり記号と大なり記号のみが含まれます< >

& becomes &amp;
< becomes &lt;
> becomes &gt;

属性値内では、使用している引用符文字もエスケープする必要があります。

" becomes &quot;
' becomes &#39;

場合によっては、これらの文字の一部をエスケープしなくても安全な場合もありますが、間違いを犯す可能性を減らすために、すべてのケースで 5 つすべてをエスケープすることをお勧めします。

ドキュメントのエンコードが、使用している文字のすべてをサポートしていない場合 (ASCII エンコードされたドキュメントで絵文字を使用しようとしている場合など) は、それらの文字もエスケープする必要があります。最近のほとんどのドキュメントは、完全に Unicode をサポートする UTF-8 エンコードを使用してエンコードされているため、この操作は必要ありません。

一般的に、スペースをエスケープしないでください&nbsp;。.&nbsp;は通常のスペースではなく、改行なしスペース通常のスペースの代わりにこれらを使用すると、2 つの単語の間に改行が挿入されるのを防いだり、自動的に折りたたまれることなく余分なスペースを挿入したりできますが、これは通常まれなケースです。デザイン上の制約で必要な場合を除いて、これを行わないでください。


1「テキスト コンテンツが想定される場所」とは、通常の解析ルールが適用される要素または引用符で囲まれた属性値の内部を意味します。たとえば、<p>HERE</p>または です<p title="HERE">...</p>。上で書いたことは、スクリプトまたはスタイル タグの内部、または要素名や属性名など、特別な解析ルールや意味を持つコンテンツには適用されません。たとえば、、、、<NOT-HERE>...</NOT-HERE>またはです。<script>NOT-HERE</script><style>NOT-HERE</style><p NOT-HERE="...">...</p>

これらのコンテキストでは、ルールがより複雑になり、セキュリティの脆弱性がもたらされやすくなります。これらの場所に動的コンテンツを挿入することは絶対にお勧めしません。セキュリティに配慮した有能な開発者チームが、これらの値を正しくエンコードしたと想定して、エッジケースを見逃すことで脆弱性をもたらすのを見たことがあります。通常は、動的な値を属性に入れてから JavaScript で処理するなど、より安全な代替手段があります。

必要な場合は、以下をお読みくださいオープンウェブアプリケーションセキュリティプロジェクトのXSS防止ルール心に留めておく必要がある懸念事項のいくつかを理解するのに役立ちます。

おすすめ記事