6

我目前为一个面向公众的网站实施了健康监测。我正在使用 SimpleMailWebEventProvider 在发生错误时发送电子邮件。“所有错误”。

我希望有这方面经验的人能够向我展示一种简单的方法来防止在“从客户端检测到潜在危险的 Request.Path 值 (:)”的情况下发送电子邮件我可以看到这些错误并且可以通过它们的时间(一次全部)和请求的 url 来判断它们来自机器人而不是人类

例子:

Request path: /Scripts/,data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g

我喜欢 .Net 在这些情况下抛出错误的事实,但这些电子邮件可能占我收到的所有健康监测电子邮件的 90%。通读所有这些以找到表明网站代码问题的错误电子邮件是一件麻烦事。

我想避免创建自己的 MailEventProvider,虽然我过去有,但我相信我最终不得不使用 ILSpy 来创建我自己的,因为 SimpleMailWebEventProvider 是密封的。

4

1 回答 1

9

为了过滤由机器人引起的异常,我通常在 Global.asax 的 Application_Error 处理程序中调用 Server.ClearError(),这样可以防止健康监控处理未处理的异常。但是,如果您将健康监控与事件日志一起使用,这也将防止错误出现在事件日志中。

void Application_Error(object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    if (exception is HttpException && exception.Message.Contains("A potentially dangerous Request.Path value was detected from the client"))
    {
        Server.ClearError();
    }
}

在实际应用中,我认为使用一些附加条件来确保错误来自机器人是有意义的,例如考虑 IP 地址、url 等。

于 2012-02-13T22:38:53.673 回答