【问题标题】:Prevent HealthMonitoring error emails for dangerous Request.Path防止危险 Request.Path 的 HealthMonitoring 错误电子邮件
【发布时间】:2012-03-03 12:07:18
【问题描述】:

我目前为一个面向公众的网站实施了健康监测。我正在使用 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 是密封的。

【问题讨论】:

    标签: c# asp.net url web-config health-monitoring


    【解决方案1】:

    为了过滤由机器人引起的异常,我通常在 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 等。

    【讨论】:

    • 谢谢!我没有想过通过在 Application_Error 中调用 ClearError 来解决问题。对于我目前的情况,我只关心健康监控邮件提供商。我不监视其他任何东西。因此,虽然这并不完美,但它可以满足我当前的需求。
    猜你喜欢
    • 1970-01-01
    • 2014-07-11
    • 2011-03-07
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多