36331


MVC2（aspx）でquerystringに危険なコードが埋め込まれた場合は以下のエラーが発生します。

[code]

    System.Web.HttpRequestValidationException: 危険な可能性のある Request.QueryString 値がクライアント (="...T 1,NULL,'<script>alert("XSS")...") から検出されました。
    
[/code]

MVC3（razor）でquerystringに危険なコードが埋め込まれた場合の挙動は何も起きません（部分ビューがない画面のみ（以下参照））。  
cshtmlに「@Html.Partial("aaaaaaaa")」が含まれているとHttpRequestValidat‌​ionException発生（以下のエラーが発生）」

[code]

    {"ハンドラー System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapper の子の要求を実行中にエラーが発生しました。"}
    
[/code]

なぜ動作が違うのか原因がわかりません。  
ご教授お願い致します。


CC BY-SA 3.0
2017-07-13T11:32:48.687
36327
2019-01-25T06:02:20.473
2017-07-13T11:52:39.517
24385
24385
question
c# asp.net mvc
MVC2とMVC3移行でquerystringに危険なコードが入力された場合の挙動が異なる


ASP.NET MVC3以降はベースとなるASP.NET及び.NET
Frameworkが4系に移行しています。この影響で、MVC2とMVC3とでバリデーション方法が異なります。`web.confing`にて[`httpRuntime`要素の`requestValidationMode`属性](https://msdn.microsoft.com/ja-
jp/library/e1f13641\(v=vs.110\).aspx)で動作を制御できます。

[code]

    <configuration>
      <system.web>
        <httpRuntime requestValidationMode="2.0" />
      </system.web>
    </configuration>
    
[/code]

の設定を行うことで従来互換のバリデーションに変更できます。  
（完全に同じ動作をするかどうかは把握していません。）

挙動が異なるだけでバリデーションが行われていないわけではないので、セキュリティを考慮すれば、無理に古いバリデーション方法を指定すべきではないと思います。


CC BY-SA 3.0
2017-07-13T13:33:18.740
36331
2017-07-13T13:33:18.740
4236
36327
answer


現在の.NET
Frameworkの実装では`HttpRequestValidat‌​ionException`は実際に問題のあるパラメーターにアクセスした場合に発生します。ですので条件は大別して

  * `RouteCollection`のパターンに登録されている
  * アクションの引数として定義されている
  * `Request.Params[key]`や`Request.QueryString[key]`で値を読み出す

のいずれかになります。

ですのでパラメーターを直接読みだしている場合は処理フローにより例外が発生しないこともあり得ます。


CC BY-SA 3.0
2017-07-13T13:55:17.123
36332
2017-07-14T01:31:17.747
2017-07-14T01:31:17.747
5750
5750
36327
answer