1. ホーム
  2. ハイパーリンク

[解決済み】HTMLでエスケープする必要があるのはどの文字ですか?

2022-05-04 21:02:59

質問

XMLと同じで、おそらくスペースの方をプラスしているのでしょうか(   )?

HTMLエスケープ文字の巨大なリストをいくつか見つけましたが、それらは エスケープされる。私が知りたいのは 必要なもの をエスケープする必要があります。

解決方法は?

文書内のテキストコンテンツが想定される場所にテキストコンテンツを挿入している場合 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> . 上に書いたこと は適用されません は、script や style タグの内部、要素名や属性名など、特別な解析ルールや意味を持つコンテンツに適用されます。例えば <NOT-HERE>...</NOT-HERE> , <script>NOT-HERE</script> , <style>NOT-HERE</style> または <p NOT-HERE="...">...</p> .

このような文脈では、ルールがより複雑になり、セキュリティの脆弱性を導入することがより容易になります。 これらの場所に動的なコンテンツを挿入することは、絶対に避けてください。 私は、有能なセキュリティ意識の高い開発者チームが、これらの値を正しくエンコードしたと思い込んで、エッジケースを見逃して脆弱性を発生させているのを見たことがあります。通常、動的な値を属性に置き、それをJavaScriptで処理するなど、より安全な代替案があります。

どうしてもという方は Open Web Application Security Project の XSS 防止ルールです。 を参照し、留意すべき点を理解してください。