XSS攻撃を防ぐために.NETを使用する方法を探しています。データをエンコードするために次の方法を見つけました。
string asdf = WebUtility.UrlEncode(code);
string asdf1 = HttpUtility.UrlEncode(code);
string asdf1a = HttpUtility.UrlEncodeUnicode(code); // OBSOLETE
string asdf1b = HttpUtility.UrlPathEncode(code);
string asdf1c = Uri.EscapeDataString(code);
string asdf1d = Uri.EscapeUriString(code);
string asdf1e = HttpUtility.HtmlEncode(code);
string asdf1f = HttpUtility.HtmlAttributeEncode(code);
(私はbyte []メソッドを省略しました...しかしそれ以上あります)
これらのメソッドのそれぞれが完全に異なる方法で機能し、完全に異なるクラスに配置されていることを考えると、間違った組み合わせを選択すると、XSSの問題が発生しやすくなると思います。
特定の状況で、特定のエンコーディング方式をいつ使用するのが適切ですか?どうして?
これは、ASP.NETでXSSを防止するためのtheソースの一種です(少なくともMicrosoftから)。
あなたの質問に固有の記事から収集するいくつかの重要なこと:
使用 HttpUtility.HtmlEncode
ユーザーまたはデータベースなどの他のソースからの入力が含まれている場合に出力をエンコードするメソッド。
使用する HttpUtility.UrlEncode
エンコード入力から構成されている場合は出力URL。
HTMLAttributeEncode
について:
HtmlAttributeEncodeメソッドは、引用符( ")、アンパサンド(&)、および左山かっこ(<)のみを同等の文字エンティティに変換します。これは、HtmlEncode
メソッドよりかなり高速です。
HtmlAttributeEncode
メソッドからの文字列結果二重引用符で囲まれた属性にのみ使用する必要があります。単一引用符で囲まれた属性でHtmlAttributeEncode
メソッドを使用すると、セキュリティの問題が発生する可能性があります。
最後に、 UriEscapeString
を使用して、エスケープするものが [〜#〜] uri [〜#〜] の場合にそれを使用します。 このSO質問 は、UriEscapeString
とUriEscapeDataString
の違いについて説明しています。