3

我试图弄清楚如何处理这个错误。

从客户端检测到潜在危险的 Request.Form 值

当用户输入 html 或 xml 标签(<p><HeyImXML>)并尝试提交表单时,会发生错误。输入根本不应该包含任何类型的标记,只是纯文本。

我在 ASP.NET MVC 2.0 中使用模型绑定验证以及Html.EnableClientValidation. 只要没有输入标记,这就可以正常工作。

如何避免此错误消息的最佳方法是什么?

我的猜测是编写一个新的验证类来检查这种标记?

我想在这个特定的实例中捕捉到错误。澄清一下,有一个区域为站点管理员提供可以输入标记的表单,而有一个普通用户区域不能输入标记。但是,当普通用户输入标记时,会出现此错误页面。我的问题是,我该如何处理以防止网站崩溃并显示错误页面。我想显示一个更清晰的错误。

4

2 回答 2

1

MVC 将自动保护您的应用程序免受一些html 注入跨站点脚本 (XSS)攻击。这就是为什么在尝试发布 html/javascript 时默认情况下会收到“从客户端检测到潜在危险的 Request.Form 值 (...)”。

但是,我们有时可能希望允许我们的用户发布 html。您可能只想允许用户使用诸​​如“›”之类的字符,或者可能是因为您实现博客功能并希望支持‹h1›、‹div›等标签。这可以通过禁用MVC轻松实现请求验证。

[ValidateInput(false)]属性添加到您正在调用的控制器中的操作方法。这将禁用针对特定操作的整个模型的请求验证。

另一种方法是将[AllowHtml]属性添加到模型中需要 html 的属性中。

这两个属性只允许 html/javascript 进入您的应用程序,但 MVC 仍将使用 html 编码安全地输出它们。如果你想像 html 一样输出它,你可以使用@Html.Raw(@Model.Content)。但请谨慎使用,因为这会使您的应用程序遭受跨站点脚本攻击 (XSS)!

我从某人的博客中找到了这个解决方案

另请参阅以下代码以了解您的解决方案

您可以通过以下方式处理应用程序中的错误

1. 在应用程序的 Web.Config 文件中设置 CustomErros 模式部分

这是 mode 属性可以接受的选项列表。

RemoteOnly:为远程用户显示一般错误页面。针对本地请求(从当前计算机发出的请求)显示丰富的错误页面。这是默认设置。

关闭:无论请求的来源如何,都会为所有用户显示丰富的错误页面。此设置在许多开发方案中很有帮助,但不应在已部署的应用程序中使用。

On:无论请求的来源如何,都会为所有用户显示一般错误页面。这是最安全的选择。

 <System.Web>
  //map all the erros presented in the application to the error.aspx webpage
 <customErrors mode="RemoteOnly" defaultRedirect ="~/error.aspx" />
<System.Web>

2.通过Application_Error函数中的Global.asax文件

 //handle all the errors presented in the application
  void Application_Error(object sender, EventArgs e){  
 Server.Tranfer("error.aspx");
}

我希望这对你有用。

来自stackoverflow解决方案

于 2012-12-11T06:46:34.677 回答
0

这是在 ASP.Net 早期引入的,旨在帮助防止脚本注入攻击。它不是 MVC 独有的。

如果您不想要此功能,可以将其关闭并编写自己的功能。

要在页面上禁用请求验证,请将 Page 指令的 validateRequest 属性设置为 false:

<%@ Page validateRequest="false" %>

要为您的应用程序禁用请求验证,请修改 Web.config - 将该<pages />部分的 validateRequest 属性设置为 false:

<configuration> 
    <system.web> 
        <pages validateRequest="false" /> 
    </system.web> 
</configuration> 
于 2010-09-20T20:12:51.710 回答