0

クライアントがサーバーに渡す必要があるパラメーターの 1 つは、ファイル パスpath/to/dataです。

MVC4コントローラーはスラッシュを使用してパラメーターを区切るため、そのまま送信することはできません。私はファイルパスをエスケープする安全なURLだと思います-例えば. path%2Fto%2Fdata、サーバーに送信し、サーバー上でエスケープ解除します。

しかし、これはうまくいきません - MVC4 はルートを認識しません。MVC4 は %2f などをエスケープ解除しますか?

アップデート

ブラウザーの応答から、MVC4 はファイルパスを検査して URL のさまざまなフィールドを取得する前に、ファイルパスのエスケープを解除しているようです。

その後、二重エスケープを行うと、報告されます...

The request filtering module is configured to deny a request that contains a double escape sequence

少し読んだり読んだりした後、web.configの一部に追加する提案を試みました...

<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>

しかし、それは報告します...

A potentially dangerous Request.Path value was detected from the client (%).
4

2 に答える 2

0

ワイルドカードを使用する

 routes.MapRoute("Path",
           "{*path}",
           new { 
                  controller = "Content", 
                  action = "Index", 
                  path = UrlParameter.Optional }
               );

または、URL エンコードされたクエリ文字列パラメーターで

于 2013-10-28T13:18:43.043 に答える
0

MVC4 は、ファイルパスを検査して URL のさまざまなフィールドを取得する前に、ファイルパスをデコードしているようです。だからあなたはそれをdblエンコードする必要があります。また...

Web.configで追加/置換..

.. system.web パーツ内

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
<pages validateRequest="false">

...そしてsystem.webserver部分に...を追加します

<security>
  <requestFiltering allowDoubleEscaping="true" />
</security>
于 2013-10-28T15:27:50.563 に答える