如何防止WebResource.axd错误的错误消息出现在应用程序日志中?

时间:2013-10-22 13:13:33

标签: asp.net logging error-handling

我在IIS 7.5下运行ASP.NET Web应用程序,我的应用程序日志中充满了这样的错误:

  

活动代码:3012

     

事件消息:处理Web或脚本资源时发生错误   请求。资源标识符无法解密。

     

...

     

异常信息:

Exception type: HttpException 

Exception message: Unable to validate data.
     

在   System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(布尔   fEncrypt,Byte [] buf,Byte []修饰符,Int32 start,Int32 length,   Boolean useValidationSymAlgo,Boolean useLegacyMode,IVType ivType,   布尔符号数据)

     

...

     

请求信息:

Request URL: http://www.mysite.com/WebResource.axd?d=l0ngstr1ng0fl3tt3rs4ndd1g1ts 

Request path: /WebResource.axd 
     

...

如何防止它们出现?根据{{​​3}},我已将以下代码添加到我的Global.asax文件中:

void Application_Error(object sender, EventArgs e)
{
  // Code that runs when an *unhandled* error occurs
  //// get reference to the source of the exception chain
  Exception ex = Server.GetLastError();
  string message = ex.Message;
  string path = Request.Path;
  // ignore the following:
  //   errors due to bots trying AXD URLs
  //   errors due to <doNastyThings /> tags in the URLs
  if (
    (ex is HttpException && (path.StartsWith("/WebResource.axd") || path.StartsWith("/ScriptResource.axd"))) ||
    (ex is HttpException && message.StartsWith("A potentially dangerous Request.Path value was detected from the client"))
    )
  {
    // clear the error *to prevent it from appearing in the main Application log*
    Server.ClearError();
    // need to manually direct to the error page, since it will no longer happen automatically once the error has been cleared
    Response.Redirect("/Error");
  }
}

此代码正在捕获和抑制第二组错误(针对潜在危险请求);但是,在执行此代码时,WebResource.axd错误已写入应用程序日志。我假设这是因为AXD处理程序在错误记录方面与标准ASPX处理程序的工作方式不同(但我不知道该做什么)。

感谢所有的帮助!

3 个答案:

答案 0 :(得分:8)

当我收到Bingbot抓取工具的请求时,我才会收到此错误消息。你可以检查它是否是bing bot here

所以我在robots.txt文件中添加了这个。如果您没有特别添加它是用户代理Bingbot

,则它不起作用
User-agent: bingbot
Disallow: /ScriptResource.axd  
Disallow: /combinescriptshandler.axd  
Disallow: /WebResource.axd 

答案 1 :(得分:2)

通常会请求

/WebResource.axd,因为页面包含指向它的链接,通常是img src:

<img ... src="/WebResource.axd..." />

通常从ASP.NET WebControl生成,例如菜单控件。

我建议您找到包含WebResource.axd引用的页面,查看它的生成方式和原因,以及它无效的原因。例如,您可以查看IIS服务器日志以查找紧接WebResource.axd请求之前的页面,或者您可以将自己的日志记录添加到Application_BeginRequest。

一旦找到有问题的页面,并确定页面上的哪个控件正在生成请求,请再次询问。

我过去在静态HTML页面中看到过这种情况,其中包含从呈现的ASPX页面复制并粘贴的HTML(例如菜单)。该请求在静态HTML页面中无效,修复只是删除有问题的img元素。

答案 2 :(得分:2)

当Bingbot做了一些非常愚蠢的事情并将其请求的URL缩小时,可能会导致这些错误。

我不知道为什么会这样做,但事件日志中列出的URL实际上是从受影响的页面链接的 - 只有一些大写字母!例如,HTML中的实际链接:

https://example.com/WebResource.axd?d=[...]13QzJRP4goegQTwpQQcl[...]

bingbot要求的相同链接:

https://example.com/webresource.axd?d=[...]13qzjrp4goegqtwpqqcl[...]

哦,好吧......这些显然是无害的错误被忽视或压制。