Web.config中的<pages validateRequest =“ false” />是否仍然重要?

时间:2019-08-16 18:34:25

标签: c# asp.net asp.net-mvc asp.net-mvc-4 web-config

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的过程中,发生了一些重大更改,从而取消了对此设置的需要?

1 个答案:

答案 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),因为您的代码中的三个开放式安全漏洞。

那么您应该删除它吗?是。首先可能不应该在那里。