1. ホーム
  2. asp.net

[解決済み] url 内の二重エスケープシーケンス : リクエストフィルタリングモジュールは、二重エスケープシーケンスを含むリクエストを拒否するように設定されています。

2023-02-09 05:15:27

質問

ASP.NET MVCアプリケーションで、以下のようなURLを実装しようとしています。

/製品/タグ/家族用

デフォルトの構成でアプリケーションを実行しようとすると、404.11 Response Code というメッセージが表示されます。

HTTP Error 404.11 - 見つかりません。

リクエストフィルタリングモジュールは、次のようなリクエストを拒否するように設定されています。 が含まれるリクエストを拒否するように設定されています。

web.configに以下のコードを実装することで、このエラーを回避することができます。

  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>

ということで、今は 404.11 .

私が疑問に思っているのは、この実装でどのようなセキュリティホールを開いているかということです。

ちなみに、私のアプリケーションは .Net Framework 4.0 の下で動作しており IIS 7.5 .

どのように解決するのですか?

セキュリティホールは、HTML インジェクション、JavaScript インジェクション、SQL インジェクションなどのコードインジェクションに関係します。

デフォルトの設定は、一般的なインジェクションの戦略が機能しないようにすることで、攻撃から半効率的に保護します。デフォルトのセキュリティを削除すればするほど、URL、GETリクエストのクエリ文字列、POSTリクエストのデータ、HTTPヘッダーなどを通じて提供される入力で何をするかを考えなければならなくなります...。

たとえば、動的な SQL クエリを id パラメータに基づいて動的な SQL クエリを構築する場合、次のようになります。

public ActionResult Tags(string id)
{
    var sql = "SELECT * FROM Tags Where tagName = '" + id + "'";
    // DO STUFF...
}

(...というのは ではない は良い考えです)、.NETフレームワークによって設置されたデフォルトの保護は、ユーザーがこのURLを要求するような、より危険なシナリオのいくつかを止めるかもしれません。

/product/tags/1%27;drop%20table%20Tags;%20--

全体の考え方は、URLやアクションメソッドへの他の入力のすべての部分を、可能性のある脅威として扱うことです。デフォルトのセキュリティ設定は、そのような保護の一部を提供します。デフォルトのセキュリティ設定を変更するたびに、手動で処理する必要がある潜在的な悪意が少しづつ開放されます。

このような方法で SQL クエリを構築していないことを前提としています。しかし、より巧妙なものは、ユーザーの入力をデータベースに保存し、後でそれらを表示するときに発生します。悪意のあるユーザーは、JavaScript や HTML をデータベースに保存し、それがエンコードされていない状態で出力される可能性があり、その結果、システムの他のユーザーを脅かすことになります。