在 Web.config 中仍然重要吗?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,web-config"/>

首页 > 解决方案 > 做在 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 的过程中,有一些破坏性的变化取消了这个设置的需要?

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

解决方案


默认情况下,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 应用程序中使用AllowHtmlValidateInput(false),因为您的代码中存在所有三个开放的安全漏洞。

那么你应该删除它吗?是的。它可能一开始就不应该在那里。


推荐阅读