web-dev-qa-db-ja.com

.NETは、XSS攻撃を防ぐためにデータをエンコードする8つ以上の方法を提供します。どちらを使用すればよいですか?

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の問題が発生しやすくなると思います。

特定の状況で、特定のエンコーディング方式をいつ使用するのが適切ですか?どうして?

2

これは、ASP.NETでXSSを防止するためのtheソースの一種です(少なくともMicrosoftから)。

方法:ASP.NETでのクロスサイトスクリプティングの防止

あなたの質問に固有の記事から収集するいくつかの重要なこと:

  • 使用 HttpUtility.HtmlEncodeユーザーまたはデータベースなどの他のソースからの入力が含まれている場合に出力をエンコードするメソッド

  • 使用する HttpUtility.UrlEncodeエンコード入力から構成されている場合は出力URL

HTMLAttributeEncode について:

  • HtmlAttributeEncodeメソッドは、引用符( ")、アンパサンド(&)、および左山かっこ(<)のみを同等の文字エンティティに変換します。これは、HtmlEncodeメソッドよりかなり高速です。

  • HtmlAttributeEncodeメソッドからの文字列結果二重引用符で囲まれた属性にのみ使用する必要があります。単一引用符で囲まれた属性でHtmlAttributeEncodeメソッドを使用すると、セキュリティの問題が発生する可能性があります。

最後に、 UriEscapeString を使用して、エスケープするものが [〜#〜] uri [〜#〜] の場合にそれを使用します。 このSO質問 は、UriEscapeStringUriEscapeDataStringの違いについて説明しています。

4
Gray