Asp.net mvc 2 处理';从客户端检测到潜在危险的请求。表单值';

Asp.net mvc 2 处理';从客户端检测到潜在危险的请求。表单值';,asp.net-mvc-2,error-handling,asp.net-mvc-2-validation,Asp.net Mvc 2,Error Handling,Asp.net Mvc 2 Validation,我正在试图找出如何处理这个错误 潜在危险的请求。从客户端检测到表单值 当用户输入html或xml标记(或)并尝试提交表单时,会发生此错误。输入不应该包含任何类型的标记,只包含纯文本 我正在ASP.NET MVC 2.0中使用模型绑定验证以及Html.EnableClientValidation。只要没有输入任何标记,这就可以正常工作 如何避免此错误消息的最佳方法是什么 我想写一个新的验证类来检查这种标记 我想捕捉这个特定实例中的错误。为了澄清这一点,有一个区域带有可供siteadmins输入标记

我正在试图找出如何处理这个错误

潜在危险的请求。从客户端检测到表单值

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

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

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

我想写一个新的验证类来检查这种标记

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

这是为了尝试帮助防止脚本注入攻击。它不是MVC独有的

如果您不想使用此功能,可以关闭它并编写自己的功能

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

<%@ Page validateRequest="false" %>
<configuration> 
    <system.web> 
        <pages validateRequest="false" /> 
    </system.web> 
</configuration> 

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

<%@ Page validateRequest="false" %>
<configuration> 
    <system.web> 
        <pages validateRequest="false" /> 
    </system.web> 
</configuration> 

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

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

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

另一种方法是向模型中需要html的属性添加
[allowtml]
属性

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

我从中找到了这个解决方案

另请参见以下解决方案代码

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

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

 //handle all the errors presented in the application
  void Application_Error(object sender, EventArgs e){  
 Server.Tranfer("error.aspx");
}
这是模式属性可以接受的选项列表

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>
我希望这对你有用


中,您是想让标记通过,还是想捕获标记并引发黄色屏幕以外的其他错误?可能重复:@Martin,我想捕获此特定实例中的错误。为了澄清这一点,有一个区域带有可供siteadmins输入标记的表单,还有一个普通用户区域不能输入标记。但是,当普通用户输入标记时,会出现此错误页面。我的问题是,我如何处理这个问题以防止网站崩溃并显示错误页面。我想在没有网站崩溃的情况下显示更清晰的错误。很抱歉,mvc中不存在。您可以在控制器中将其作为元标记激活,对于我正在使用的.NET4.0,它位于标记下。我编辑了我的原始帖子以澄清我的问题。全局禁用验证是不安全的