c# - 做在 Web.config 中仍然重要吗?
问题描述
ASP.NET MVC 应用程序,目标框架:.NET Framework 4.7.2
带有一堆遗留代码的非常古老的项目。
Views 文件夹中的 Web.config 文件包含以下部分:
<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 将防止潜在的危险请求。
要发布任何类型的脚本或 HTML,您需要添加:
1 - 控制器操作方法上的ValidateInput属性
[ValidateInput(false)]
public ActionResult AddEntry(MyModel model) {
:
}
2 - 模型属性的AllowHtml属性
public class MyModel
{
[AllowHtml]
public string HtmlContent { get; set; }
}
Web Config 的 Pages 部分是 WebForms 的东西
“指令 [在 pages 元素中] 指定页面和用户控件编译器在处理 ASP.NET Web 窗体页面 (.aspx) 和用户控件 (.ascx) 文件时使用的设置。 ” 请参阅(此处)
<pages validateRequest="false" />
是 WebForms 的遗留物,MVC 应用程序不再需要它。
因此,因为 MVC 不使用其中的任何一个,所以它现在是无关紧要的。当然,除非您的应用程序包含 MVC 和 Webforms 逻辑的混合。
底线
理想情况下,您不应在使用 WebForms 时将validateRequest设置为 false,或者在 MVC 应用程序中使用AllowHtml或ValidateInput(false),因为您的代码中存在所有三个开放的安全漏洞。
那么你应该删除它吗?是的。它可能一开始就不应该在那里。
推荐阅读
- python - 整数转换为时间
- angular - 在Angular中的http调用后尝试操作变量后无法读取未定义的属性(读取'forEach')
- spring-boot - Spring Cloud Gateway 路径和 ID,无法解析来自 Eureka 的服务
- flutter - appStateManager.addListener(notifyListeners); 是什么?意思是?
- flutter - 在颤动的画布上区分单指拖动和多指拖动
- javascript - 地图在对象中不是函数
- javascript - JS 功能阻止我使用@media screen 更改 div 高度
- c - 按下按钮时如何返回初始屏幕?
- automation - Ansible 在不终止进程的情况下运行任务
- python - DAG 运行已启动,但任务仍处于 no_status