web-dev-qa-db-ja.com

ASP.NETのリクエスト検証機能はどの程度信頼できますか?

ASP.NETは、一般にXSS攻撃およびインジェクションと呼ばれる要求の検証からアプリケーションを保護する追加のレイヤーを提供します。

彼らの公式 topic について、彼らはそれについて言及しています:

リクエストの検証を使用している場合でも、ページに表示する前に、ユーザーから受け取ったテキストをHTMLエンコードする必要があります。

Webアプリケーションがサーバーに送信されたデータを検証またはサニタイズしないものの、機能が有効になっていると仮定すると、この追加のレイヤーをバイパスして悪意のあるコードを送信するにはどうすればよいですか?この機能はASP.NETアプリケーションに必要ですか?

11
Simon

侵入テスターとして、「リクエストの検証」がさまざまな状況で失敗することを発見しました。開発者は"Request Validation" == "magic"、そしてXSSから完全に保護します。実際、この誤ったセキュリティの感覚は非常に深刻な問題を引き起こします。 DOMベースのXSSおよび永続的XSSのすべての形式は、「要求の検証」をバイパスしますが、失敗する他のケースがあります。

この次のケースでは、攻撃者はHTMLタグを記述する必要はありません。JavaScriptURIを記述するだけで、攻撃者はJavaScriptを実行できます。

<a href="javascript:alert(1)">xss</a>
<iframe src="javascript:alert(1)" />

この場合、攻撃者は既にスクリプトタグ内に書き込みを行っています。

<script>
  var x=alert(1);
</script>
13
rook

はい、デフォルトのリクエスト検証ではXSSを回避するには不十分ですが、多くは詳細に依存します。

デフォルトのリクエスト検証では、<や%などの標準文字のみがフィルタリングされますが、結果のレンダリング方法によっては、実行されるものを作成することも可能です。 XSSのさまざまな攻撃ベクトルをご覧ください。文字セットが制限されていても、XSSを実行する可能性はたくさんあります。

0
http