ASP.NET MVC应用程序,目标框架:.NET Framework 4.7.2
相当老的项目,带有一堆旧代码。
“视图”文件夹中的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将丢失上面的自动生成部分。
我们还需要此页面元素和validateRequest =“ false”属性吗?
或者在从Web页到.NET Framework 4.7.2的MVC的过程中,发生了一些重大更改,从而取消了对此设置的需要?
答案 0 :(得分:2)
默认情况下,MVC会阻止潜在的危险请求。
要发布任何类型的脚本或HTML,您需要添加以下任一内容:
1-控制器操作方法上的 ValidateInput 属性
contractNumber
2-模型属性上的 AllowHtml 属性
[ValidateInput(false)]
public ActionResult AddEntry(MyModel model) {
:
}
Web Config的Pages部分是WebForms内容
“ [pages元素中的]指令指定页面和用户控制编译器在处理ASP.NET Web窗体页面(.aspx)和用户控制(.ascx)文件时使用的设置。”请参阅(here)
public class MyModel
{
[AllowHtml]
public string HtmlContent { get; set; }
}
是WebForms的遗留物,MVC应用程序不再需要。
因此,由于MVC不使用任何MVC,因此现在不相关了。当然,除非您的应用程序包含MVC和Webforms逻辑的混合。
底线
理想情况下,永远不要在使用WebForms时将 validateRequest 设置为false,或在MVC应用程序中使用 AllowHtml 或 ValidateInput(false),因为您的代码中的三个开放式安全漏洞。
那么您应该删除它吗?是。首先可能不应该在那里。