を使用してデータを単純にエンコードできるのにHttpUtility.HtmlEncode
、なぜ を使用する必要があるのAntiXss.HtmlEncode
でしょうか。
ホワイトリスト方式がブラックリスト方式より優れているのはなぜですか?
また、Anti XSS ライブラリでは、どこでホワイトリストを指定すればよいですか?
を使用してデータを単純にエンコードできるのにHttpUtility.HtmlEncode
、なぜ を使用する必要があるのAntiXss.HtmlEncode
でしょうか。
ホワイトリスト方式がブラックリスト方式より優れているのはなぜですか?
また、Anti XSS ライブラリでは、どこでホワイトリストを指定すればよいですか?
AntiXSS ライブラリでホワイト リストを指定または変更することはできません。これは、考えてみればおかしなことではありません。デフォルトでは、AntiXSS ライブラリは、0..9a..zA..Z の範囲にないすべての文字をエンコードします。この文字セットは安全であり (したがって、ホワイト リストに含まれています)、エンコードする必要はありません。AntiXSS ライブラリには、javascript、html、および url をエンコードするための異なるリストがあることに注意してください。アプリケーションにセキュリティ ホールができるため、URL に html エンコードを使用しないでください。
HtmlEncode
のホワイト リストは、 のホワイト リストとは異なる動作をすることに注意してくださいGetSafeHtmlFragment
。「ホワイト リストにないすべての文字をエンコードHtmlEncode
してください」と言うと、「ホワイト リストにないすべてのタグと属性を削除してください」と言います。GetSafeHtmlFragment
ASP.NET 4.0 を使用している場合は、AntiXSS ライブラリを (直接) 使用するのではなく、組み込みのメカニズム (HttpUtility など) を使用して Html をエンコードすることをお勧めします。ASP.NET 4.0では、構成ファイルで HttpEncoder を構成できます。AntiXSS ライブラリを使用する独自のライブラリを作成できますHttpEncoder
(AntiXSS ライブラリの将来のバージョンにはHttpEncoder
実装が含まれる可能性があります)。これにより、アプリケーション全体 (およびすべての ASP.NET コントロールとカスタム コントロール) で、ブラック リスト エンコーディングではなくホワイト リスト エンコーディングが使用されます。
ASP.NET 4.0 では、エンコードされたテキスト用の新しいコード ブロックも導入されています。名: を使用できます<%: Model.FirstName %>
。しかし、私は個人的に<%= HttpUtility.HtmlEncode(Model.FirstName) %>
もっと明白だと思います。
AntiXss ライブラリには、Javascript や属性などの Encode メソッドも含まれています。
AntiXss ライブラリを実装してみましたが、スクリプト タグを削除するとうまくいきました。しかし、HTML ではそうできませんでした。以下の例を参照してください
<a href="http://west-wind.com">West Wind</a><br>Hello<br>Please login with the form below before proceeding:<form action="”mybadsite.aspx”"><table><tbody><tr><td>Login:</td><td><input type="text" name="x_x_x_x_x_x_x_x_x_x_x_x_x_login"></td></tr><tr><td>Password:</td><td><input type="text" name="x_x_x_x_x_x_x_x_x_x_x_x_x_password"> </td></tr></tbody></table><input type="submit" value="LOGIN"></form>