AntiXss.HtmlEncodeとHttpUtility.HtmlEncodeの違いは何ですか?
クロスサイトスクリプティングを回避するために、AntiXssライブラリを提案する回答のある質問を見つけました。 msdn blog を読んで面白いように思えますが、これはHtmlEncode()メソッドを提供するだけのようです。しかし、私はすでにHttpUtility.HtmlEncode()を使用しています。
なぜHttpUtility.HtmlEncodeではなくAntiXss.HtmlEncodeを使用するのですか?
確かに、私はこの質問をする最初ではありません。そして、確かに、Googleは主に someanswers を主に取り上げます
- ブラックリストアプローチではなくホワイトリスト
- 0.1msのパフォーマンス向上
それはいいことですが、私にとってはどういう意味ですか?私は0.1msのパフォーマンスをあまり気にしていませんし、すでに持っている機能のために別のライブラリの依存関係をダウンロードして追加したくありません。
AntiXss実装がHttpUtility実装が防止しない攻撃を防止するケースの例はありますか?
HttpUtility実装を引き続き使用すると、危険にさらされますか? this 'bug' はどうですか?
特に質問に対する回答はありませんが、ホワイトリストとブラックリストのアプローチは「良い」だけではないことを指摘しておきます。それは重要です。とても重要です。セキュリティに関しては、すべての小さなことが重要です。クロスサイトスクリプティングと cross-site request forgery を使用すると、サイトに機密データが表示されていなくても、ハッカーはJavaScriptを挿入してサイトに感染し、それを使用して別のサイトから機密データを取得できます。したがって、それを正しく行うことが重要です。
OWASPガイドラインはホワイトリストアプローチの使用を指定しています 。 PCIコンプライアンスガイドラインでも、コーディング標準でこれを指定しています(OWASPガイドラインを参照しているため)。
また、新しいバージョンのAntiXssライブラリには、新しい新しい関数.GetSafeHtmlFragment()があります。これは、HTMLをデータベースに保存し、HTMLとしてユーザーに表示する場合に適しています。
また、「バグ」については、適切にコーディングしてすべてのセキュリティガイドラインに従っている場合、パラメータ化されたストアドプロシージャを使用しているため、一重引用符は正しく処理されます。適切にコーディングしていない場合は、棚ライブラリはあなたを完全に保護します。 AntiXssライブラリは、知識の代わりではなく、使用するツールであることを意図しています。図書館があなたのためにそれを正しく行うことに頼ることは、本当に良い絵筆が良い芸術家なしで良い絵を作ることを期待するでしょう。
編集-追加
質問で尋ねられたように、アンチxssがあなたを保護し、HttpUtilityが保護しない例:
HttpUtility.HtmlEncodeおよびServer。HtmlEncodeはクロスサイトスクリプティングを妨げません
それは著者によると、しかし。私はそれを個人的にテストしていません。
セキュリティガイドラインを順守しているようですが、これは私があなたに伝える必要があることではないかもしれませんが、経験の浅い開発者がこれを読んでいる場合に備えて、ホワイトリストのアプローチが重要であると私が言う理由これは。
現在、今日、HttpUtility.HtmlEncodeは<
と>
に加えていくつかの「安全でない可能性のある既知の」文字を削除またはエンコードするだけで、そこにあるすべての攻撃を正常にブロックできますが、誰かが常に新しい侵入方法を考えます。既知の安全な(ホワイトリスト)コンテンツのみを許可することは、攻撃者があなたに投げかける可能性のあるすべての安全でない可能性のある入力について考えるよりもはるかに簡単です(ブラックリストアプローチ)。
なぜどちらか一方を使用するのかという点では、AntipSSSライブラリがASP.NETフレームワークよりも頻繁にリリースされることを考慮してください。誰かがそれを思いついた場合、AntiXSSライブラリは更新されたリリースを入手して防御する可能性がはるかに高くなります。
_Microsoft.Security.Application.AntiXss.HtmlEncode
_メソッドと_System.Web.HttpUtility.HtmlEncode
_メソッドの違いは次のとおりです。
Anti-XSSは、ホワイトリスト手法(包含の原則とも呼ばれる)を使用して、クロスサイトスクリプティング(XSS)攻撃に対する保護を提供します。このアプローチは、最初に有効または許容される文字のセットを定義することで機能し、このセットの外にあるもの(無効な文字または潜在的な攻撃)をエンコードします。 _
System.Web.HttpUtility.HtmlEncode
_およびその名前空間内の他のエンコード方式は、除外の原則を使用し、<、>、&、 '文字など、潜在的に危険であると指定された特定の文字のみをエンコードします。Anti-XSS Libraryのホワイト(または安全な)文字のリストは、12を超える言語(ギリシャ語とコプト語、キリル文字、キリル文字のサプリメント、アルメニア語、ヘブライ語、アラビア語、シリア語、アラビア語のサプリメント、Thaana、NKOなど)をサポートします。
Anti-XSSライブラリは、XSS攻撃を軽減するために特別に設計されていますが、
HttpUtility
エンコーディングメソッドは、ASP.NET出力がHTMLを壊さないようにするために作成されます。パフォーマンス-
AntiXss.HtmlEncode()
とHttpUtility.HtmlEncode()
の間の平均デルタは、トランザクションあたり+0.1ミリ秒です。Anti-XSSバージョン3.0は、開発者がXSS検証とパフォーマンステストの両方を実行できるテストハーネスを提供します。
ほとんどのXSS脆弱性(実際にはあらゆるタイプの脆弱性)は、既存のセキュリティが特定の事態の発生を「期待」していないという事実に純粋に基づいています。ホワイトリストのみのアプローチは、デフォルトでこれらのシナリオを処理する傾向があります。
MicrosoftのWindows Liveサイトでは、ホワイトリストアプローチを使用しています。私たちがまだ考えていないセキュリティ攻撃がいくつもあると確信しているので、私はパラノイアなアプローチの方が快適です。ブラックリストが公開した脆弱性がホワイトリストが公開しなかったケースがあったのではないかと思いますが、詳細はお伝えできませんでした。