Web.config 中的 <pages validateRequest="false" /> 还重要吗?

Does <pages validateRequest="false" /> in Web.config still matter?

ASP.NET MVC 应用程序,目标框架:.NET Framework 4.7.2

相当老的项目,有一堆遗留代码。

Web.config Views 文件夹中的文件包含以下部分:

<system.web>

    <!--
    Enabling request validation in view pages would cause validation to occur
    after the input has already been processed by the controller. By default
    MVC performs request validation before a controller processes the input.
    To change this behavior apply the ValidateInputAttribute to a
    controller or action.
    -->

    <pages validateRequest="false" />

</system.web>

这部分是几年前创建项目时自动生成的。

如果现在为 .NET Framework 4.7.2 创建一个 ASP.NET MVC 项目,那么 Web.config 将错过上面自动生成的部分。

我们还需要这个 pages 元素和 validateRequest="false" 属性吗?

或者在从 WebPages 到 .NET Framework 4.7.2 的 MVC 的过程中的某个时刻出现了重大更改,取消了此设置的需要?

MVC 默认会阻止潜在的危险请求。

到 post 任何类型的脚本或 HTML 您需要添加:

1 - 控制器操作方法ValidateInput 属性

[ValidateInput(false)]
public ActionResult AddEntry(MyModel model) {
    :
}

2 - 模型 属性

上的 AllowHtml 属性
public class MyModel 
{
  [AllowHtml]
  public string HtmlContent { get; set; }
}

Web Config 的页面部分是 WebForms 的东西

"指令 [在 pages 元素中] 指定页面和用户控件编译器在处理 ASP.NET Web 窗体页面 (.aspx) 和用户控件 (.ascx) 时使用的设置) 文件。" 参见 (here)

<pages validateRequest="false" />

是 WebForms 的遗留物,MVC 应用程序不再需要它。

因此,由于 MVC 不使用其中的任何一个,因此现在已无关紧要。当然,除非您的应用程序包含 MVC 和 Webforms 逻辑的混合。

底线

理想情况下,在使用 WebForms 时永远不要将 validateRequest 设置为 false,或者使用 AllowHtmlValidateInput(false) 在 MVC 应用程序中,因为代码中的所有三个开放安全漏洞。

所以你应该删除它吗?是的。它可能一开始就不应该存在。