2012-02-14 11 views
0

今日、最も一般的な攻撃の1つはクロスサイトスクリプティング(XSS)です。この攻撃は、アプリケーション自体の攻撃よりもアプリケーションの攻撃ではありますが、サーバー側のアプリケーションの脆弱性はすべて同じです。結果は壊滅的なことができ、情報開示、身元詐称、と私は前にそれらを管理するサーバ側の/検証入力サニタイジングについて多くの示唆を参照してくださいthis文書を読む権限.NETが手動で入力をサニタイズするのはなぜですか?

の上昇につながることができます。

私が知っているように、ストアドプロシージャ(DB側)と.NET(電子メールを管理するために)を使用すると、私は確信しています。

ストアドプロシージャと.NETの両方が失敗する(サニタイズ/検証なし)と「安全でない」場合があるシナリオを表示できますか?

私が言うように、私は「セキュリティ」を意味し、データの持続性/正確性を意味しません!私は、サニタイズ入力に同意します...

答えて

1

私は私の回答参照javaを知っていますが、私はそれが少なくともいくつかのコンテキスト(別の理由応答がコメントのために大きい)を提供すると感じました。あなたが参照されるドキュメントから

String Fields 

To validate string fields, such as names, addresses, tax identification numbers, and so on, use regular expressions to do the following: 

    Constrain the acceptable range of input characters. 
    Apply formatting rules. For example, pattern-based fields, such as tax identification numbers, ZIP codes, or postal codes, require specific patterns of input characters. 
    Check lengths. 

あなたはどちらか/この文字列/タイプの検証の長さに制約されていないクライアント側/サーバ側で、洗練された攻撃者は、長い入力を提供することにより、あなたのシステムを混乱させる可能性がある場合文字列。確かにこれはJavaの問題です(.NETはIISが平等のためにハッシュコードを使用していると仮定して、.NET/IISには当てはまらない、私は間違っているかもしれません)。

ここ数年前にSOに興味がありました。

制限文字列として文字列サイズを制限できる場合。これらの問題を避けることができます。

0

標準の.NET Frameworkオブジェクトにデータを渡す場合、これらのオブジェクトは独自の消毒を処理する必要があります。 .NETが処理する方法を知らないすべてのデータとして、サニタイズする必要があるデータを考える必要があります。すなわち、.NETフレームワークが何が使用されるかを知らないデータ。

たとえば、.NETフレームワークは、文字列値が社会保障番号として使用されることを認識しません。これを直接的に、またはデータベースに保存して後で渡す場合は、社会保障番号が期待どおりであることを確認するために、入力を害虫駆除して検証したいと思うでしょうフォーマット。これを行わないと、サードパーティシステムのセキュリティ上の脆弱性のためにシステムが攻撃に対して脆弱になる可能性があります。例えば特定の文字を含む社会保障番号が入力されると、第三者のシステムがクラッシュする可能性があり、その結果、ダウンしているサービスと通信しようとしているときにシステムとのサービス拒否が発生する可能性があります。このシナリオは多くの可能性の1つに過ぎず、必ずしもDOS攻撃を受ける必要はありませんが、究極的には入力を検証して不明なものに対して警戒する必要があります。

特にXSSについて言及していますが、これはRequest Validationのデフォルトオプションが有効でない限り、標準の.NET Webコントロールが実際に脆弱である脆弱性です(http://www.asp.net/whitepapers/request-validation参照)。これは、Textプロパティを設定するときに.NET Webコントロールが自動的にHTMLエンコード文字を使用しないためです。したがって、リクエストの検証を行わずにサイトを実行している場合は、すべての出力が適切にエンコードされていることを確認する必要があります(これは出力の一種です)。私がMVCフレームワークで開発するWebフォームではなく、HTML出力を簡単に使用できるようにしました(例:<%:%>ブラケットはHTMLエンコード出力を自動的に行います)。これにより、出力が適切に消されるため、アプリケーションがこのように保護されている場合、要求の検証を無効にすることができます(これは私の好みです)。オプションを指定すると、ユーザー入力を不必要に操作していません。例えば、SOが入力を浄化して<script>タグを削除した場合、このメッセージにそれらを含めることは不可能です。

ウェブアプリケーションに共通する別のタイプの消毒剤は、JavaScriptに挿入される文字列を正しくフォーマットすることです(例:一重引用符や二重引用符など)。一言で言えば、入力を介して悪意のあるJavaScriptを挿入したユーザーに対して、別のユーザーに表示され、適切にサニタイズされていないと実行されることを防ぎます。実行すると、セキュリティレベルが高い新しいユーザーとして要求が実行されます。このアプリケーションではあらゆる種類の損傷が発生する可能性があります。

+0

ニースの回答!まあ... – markzzz

+0

1 - "標準の.NET Frameworkオブジェクトにデータを渡している場合、これらは自分のsanitisationを処理する必要があります。"それとも、それは自動的に独自の衛生用具を呼んでいるのですか? – markzzz

+0

2 - うん、 "Validation"についての "確かな考え"を意味します。なぜそれを無効にする:) – markzzz

0

浄化入力はめったに正しい選択ではありません。エンコード、エスケープ、または削除する必要があるものが分かっているのは、その場所だけが知っているからです。

よく設計されたAPIを使用する場合は、ほとんどの場合、手動による消毒は必要ありません。しかし、場合によっては、API以外の知識もあるため、手動でエンコードまたは検証する必要があります。たとえば、htmlページに埋め込まれたJavaScriptの内部で文字列が使用されている場合、自動的なhtmlエンコーディング出力はあなたを保護しません。

<script>var text="@Model.UserControlledData";</script> 

自動エンコードルールはjavascript文字列ではなくhtmlに適合します。したがって、これは安全ではありません。

関連する問題