Elmah自定义ErrorLogModule配置未生效,敏感信息仍在异常邮件中
问题:Elmah自定义ErrorLogModule无法移除生产环境邮件中的敏感信息
背景
我接手了一个基于ASP.NET MVC开发的遗留内部站点,该站点使用Elmah发送未捕获异常的邮件,但邮件中包含密码等敏感信息。我实现了自定义ErrorLogModule类以移除错误报告中的敏感字段:
using Elmah; using System.Linq; using ElmahErrorLogModule = Elmah.ErrorLogModule; namespace HRCommittee { // 修改自现有方案实现 public class ErrorLogModule : ElmahErrorLogModule { protected override void OnErrorSignaled(object sender, ErrorSignalEventArgs args) { string[] serverVariables = args.Context.Request.ServerVariables.AllKeys; string[] varsToRemove = { "AUTH_PASSWORD", "HTTP_COOKIE", "ALL_HTTP", "ALL_RAW" }; if (serverVariables != null) { foreach (string var in varsToRemove) { if (serverVariables.Contains(var)) { args.Context.Request.ServerVariables.Remove(var); } } } base.OnErrorSignaled(sender, args); } } }
Web.config模块配置
站点的web.config中相关模块配置如下:
<system.webServer> <modules> <remove name="FormsAuthentication" /> <!--<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />--> <!--<add name="ErrorLog" type="HRCommittee.App_Start.ErrorLogModule" preCondition="managedHandler" />--> <add name="ErrorLog" type="HRCommittee.ErrorLogModule" preCondition="managedHandler" /> <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" /> <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /> </modules> <!-- other stuff --> </system.webServer>
但邮件内容并未改变,且发现之前有人也做过相同尝试但未成功。由于Elmah文档匮乏,且我对微软技术栈较陌生,难以排查问题。我遗漏了什么?
更新:本地测试结果
我搭建了本地SMTP服务器,在本地运行站点并触发异常(代码与生产环境一致):
try { throw new Exception("Test message"); } catch (Exception e) { AccountController.LogToElmah("Error Saving Form", e); }
此情况下邮件已按预期脱敏,无论是否修改上述Web.config配置结果都一致。现在等待生产环境再次出现异常,但预期不会有变化,问题变得更复杂。
内容的提问来源于stack exchange,提问作者Scott Severance
相关产品推荐
相关产品推荐

