MVC2とMVC3移行でquerystringに危険なコードが入力された場合の挙動が異なる


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]

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




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]

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

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




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]

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

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

