禁用ASP.Net Request.Path验证

时间:2010-09-20 06:18:22

标签: asp.net .net-4.0

我们正在同时在线运营一个大约6000-7000名访客的网站(这是为了表明尺寸)

从ASP.Net 3.5切换到4.0后,我们突然面对大量的这些:

  

从客户端(>)检测到潜在危险的Request.Path值。

它们都是已损坏的网址,并且似乎包含某种HTML或javascript,这些网址会被投放到其他有效的网址上。

例如我们有这样的一个:

  

/ UI / Forms / Users / Photos / function(val){var result = null; for(var i = 0; i< this.length; i ++){if(this [i] === val){result = this [i]; this.splice(我

正如您所看到的那样,它是一个相对URL,并且在/ Photos /之前有效。但是函数(val)等是来自prototype.js的函数,它通常包含在页面上。

我们无法重新创建问题,但是这会导致成千上万的异常,我们宁愿没有,因为日志记录过程需要时间。此外,过多的“无关”异常导致我们的日志更难以阅读实际问题。

因此,我认为除了禁用验证之外别无选择 - 所以问题是如何?

我不想完全禁用请求验证,因为这也会禁用已发布表单值的验证。

非常感谢您提前提供任何帮助: - )

1 个答案:

答案 0 :(得分:3)

如果此功能是您网站的一部分(将特殊字符发布到某些页面),那么您可以将以下内容添加到您的web.config中:

<httpRuntime requestValidationMode="2.0" />

这将禁用标有ValidateRequest="false"的网页的请求验证。在ASP.NET 4.0中,您需要此属性,或者即使您禁用页面请求验证,您也会获得异常。

另一方面,如果这些例外是对您网站的攻击,那么就什么也不做,让ASP.NET框架放弃那些危险的请求。