如何防止 ASP.NET 记录身份验证失败?

Posted

技术标签:

【中文标题】如何防止 ASP.NET 记录身份验证失败?【英文标题】:How do I prevent ASP.NET from logging authentication failures? 【发布时间】:2014-06-08 08:35:55 【问题描述】:

我的 Windows Azure Web 角色 ASP.NET MVC 应用程序在某些路由上提供 REST API 请求,而这些路由需要“基本”身份验证。客户端程序经常无法进行身份验证——它们中的大多数都在被调试的过程中——因此身份验证失败是很常见的。对于每个事件,我都会在 Application 日志中获得这样的记录(可通过事件查看器或 System.Diagnostics.EventLog 类访问)

Date and Time Here (ASP.NET 4.0.30319.0): Event code: 100001
Event message: Authentication failure
Event time: Date and time
Event time (UTC): UTC date and time
// lots of information follows

我确信我永远不会读取这些消息,并且写入它们会消耗服务 VM 上的一些 CPU 时间和 IO 带宽。

如何让那些失败不被记录?

【问题讨论】:

你在哪里看到的?在 Windows 事件查看器中?存储中的 Azure 诊断日志? @haim770:在事件查看器 Application 日志中。 你试过了吗? msdn.microsoft.com/en-us/library/ms524984(v=vs.90).aspx @haim770:我尝试将 web.config 中的 errorsToNTLog 设置为“false”(根据 MSDN,这是默认值,但无论如何),行为是相同的。 【参考方案1】:

对于今天阅读已接受答案的任何人;请注意,这不是推荐的安全最佳做法。记录身份验证错误对于识别应用程序攻击至关重要。绝不应在生产系统和/或面向 Internet 的系统中禁用此日志记录。密码攻击包括暴力破解、字典攻击、密码喷洒、凭证填充等。这些可以通过记录和监控身份验证失败来检测。

虽然作者解释说这是一个开发环境,但应用程序正在调试这一事实并不意味着我们应该接受身份验证失败。如果应用程序面向 Internet,那么最理想的方法是检测对系统的任何入侵和攻击,以便采取适当的安全措施。

【讨论】:

【参考方案2】:

此行为是使用web.config 中的<system.web><healthMonitoring> 元素配置的。 The default behavior 正在将所有未处理的异常和身份验证失败记录到应用程序事件日志中。有两条“规则”——一条用于前者,一条用于后者。

所以我刚刚添加了这个:

<healthMonitoring>
  <rules>
    <clear />
  </rules>
</healthMonitoring>

这使得这些默认规则消失了,问题就解决了。请注意,这也删除了记录我也不需要的未处理异常的规则。

【讨论】:

以上是关于如何防止 ASP.NET 记录身份验证失败?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Windows 身份验证仅提示一个用户的凭据

将特定域的 ASP.NET 模拟用户添加到 windows 身份验证

如何支持 NTLM 身份验证并回退到 ASP.NET MVC 中的表单?

ASP.NET Core 5 JWT 身份验证失败,响应代码为 401

ajax 在 asp.net webforms 中返回 json 对象的身份验证失败

在 Angular 9 + Asp.net Core Web API 中启用 Windows 身份验证后,预检(选项)请求失败