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,或者使用 AllowHtml 或 ValidateInput(false) 在 MVC 应用程序中,因为代码中的所有三个开放安全漏洞。
所以你应该删除它吗?是的。它可能一开始就不应该存在。
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,或者使用 AllowHtml 或 ValidateInput(false) 在 MVC 应用程序中,因为代码中的所有三个开放安全漏洞。
所以你应该删除它吗?是的。它可能一开始就不应该存在。