8


6

DBに保存する前またはレンダリングする前にHTMLをサニタイズしますか? (ASP.NETのAntiXSSライブラリ)

ユーザーがデータベースに保存され、Webページに表示されるHTMLを追加できるエディターを持っています。 これは信頼できない入力であるため、「Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment」を使用してHTMLをサニタイズする予定です。

  • データベースに保存する前、またはレンダリングする前に、サンティナイズする必要がありますか Webページへの信頼できない入力

  • AntiXSSソースコードを私の中に含めることには利点がありますか DLLだけではなくプロジェクトですか? (ホワイトリストをカスタマイズできますか?)

  • の実際の実装のためにどのクラスファイルを調べる必要がありますか GetSafeHtmlFragment

4 Answer


31


2つの理由で選択した回答に同意しません

  1. エンコードされたデータを保存した場合、エンコーダを選択する必要があります 格納。 何かをHTMLとして保存しているが、別の形式、たとえばJSON応答として、またはXMLドキュメントの一部としてそれをプッシュしたい場合はどうなりますか? これで、デコードする必要のあるHTMLエンコード形式が得られ、正しい形式でエンコードします。

  2. エンコーダーのバグを発見し、新しいバージョンをプッシュするとどうなりますか? これで、出力時点でエンコードを行っていないため、すべての古いデータに誤ってエンコードされたものが含まれている可能性があります。 再度エンコードすることはできますが、正しくフィルタリングするのが困難な場合がある二重エンコードの問題が発生します。

一般に、出力の時点でエンコードし、デフォルトではデータストアからのデータを信頼できないものとして扱います。


10


XSSのJeff WilliamsとのOWASPポッドキャスト67を聞いてください。 彼は、保管する前にサニタイズまたはエンコードしないことについて話しています。 主な理由は、新しい脆弱性に対応してライブラリが(いつ)進化した場合、データは古いバージョンに戻されます。 もちろん、これは、エントリポイントでホワイトリストに対して入力を実行し、許容範囲外のものを拒否することを妨げるものではありません。


3


  • Both

  • あなたがそれを変更する予定がある場合にのみ、私は個人的にそれをしません

  • AntiXssクラス(と呼ばれているため AntiXss.GetSafeHtmlFragment()


-1


pageディレクティブでパラメーター* ValidateRequest = "true" *を使用できます。 このようにして、すべてのリクエストデータが検証され、検証に問題がある場合は、常にエラーをキャッチできます。 また、XSSだけでなく、SQLインジェクションスレッドなども防ぎます。

数値データでは、Int32.TryParse()またはその他のTryParseファミリ(Byte.TryParse Int16.TryParse …​)を使用して、整数オーバーフローまたはデータ型の誤用を検証できます。

他のクラスまたは追加のサニタイザーメソッドを使用する必要はありません。