[解決済み] ダブルエスケープを有効にすることは危険か?
質問
ASP.NET MVCアプリケーションで、/search/<searchterm>で検索できるルートを持っています。
私が "search/abc" を供給するとき、それはうまく動作しますが、私が "/search/a+b+c" (正しく url エンコードされた) を供給すると、IIS7 は HTTP Error 404.11 で要求を拒否します ( リクエストフィルタリングモジュールは、二重のエスケープシーケンスを含むリクエストを拒否するように構成されています。 ). まず第一に、なぜこのようなことが起こるのでしょうか?それが URL の一部である場合にのみエラーをスローするようですが、クエリ文字列の一部としてはスローしません (/transmit?q=a+b+c は問題なく動作します)。
Web.config のセキュリティ セクションでダブル エスケープ リクエストを有効にすることはできますが、その意味するところを理解していないため、そうすることをためらっていますし、サーバーが URL の一部として "a+b+c" というリクエストを拒否してクエリ文字列の一部として受け入れる理由も理解していません。
どなたか、どうすればよいか説明し、アドバイスをいただけないでしょうか。
どのように解決するのですか?
編集してください。 該当箇所の強調を追加しました。
基本的には IIS は過度に偏執的になっています。 URI デコードされたデータで特に不用意なことをしていなければ、このチェックを安全に無効にすることができます (たとえば、文字列連結によってローカル ファイルシステムの URI を生成するような場合)。
このチェックを無効にするには、次のようにします (以下は ここで ): (ダブルエスケープが何を意味するかについては、以下の私のコメントを参照してください)。
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>
プラス記号が検索入力で有効な文字である場合、次のようになります。 が必要です。 を有効にし、IIS が URI のパスからそのような入力を処理することを許可する必要があります。
最後に、限定的ではありますが、非常に簡単な回避策は、単に '+' を避け、代わりに '%20' を使用することです。
いずれにせよ、スペースをエンコードするために '+' シンボルを使用することは ではなく 有効な url エンコーディングです。 が、限られたプロトコルのセットに固有のもので、後方互換性の理由からおそらく広くサポートされています。 正規化の目的だけであれば、スペースを '%20' としてエンコードするほうがよいでしょう。
関連
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み] 2つのリストを結合する
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み] 関数を終了するには?
-
[解決済み] 任意の長さのリクエストを許可するように web.config を設定する方法
-
[解決済み] クライアントから危険な可能性のあるRequest.Formの値が検出された
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] クライアントから危険な可能性のあるRequest.Pathの値が検出されました(*)