【问题标题】:How to remove "Auth_Password" from ELMAH logs如何从 ELMAH 日志中删除“Auth_Password”
【发布时间】:2010-12-01 05:56:46
【问题描述】:

出于相当明显的原因,我想找出消除 Auth_Password 被 ELMAH 捕获的最佳方法。这样做的最佳方法是什么?

【问题讨论】:

    标签: c# .net asp.net elmah


    【解决方案1】:

    由于 ELMAH 是开源的,我像这样修改了 Error.CS 文件。在 Error.CS 的 Error cunstructor 内部(大约第 126 行),我添加了以下内容:

    _serverVariables.Remove(AUTH_PASSWORD);
    //AUTH_PASSWORD = const string = "AUTH_PASSWORD" AND SET ELSEWHERE
    

    【讨论】:

    • 尽管我也很喜欢,但我觉得太便宜了。
    【解决方案2】:

    我已经设法在不修改 ELMAH 源的情况下做到了这一点:http://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication-part-2/

    【讨论】:

      【解决方案3】:

      我刚遇到同样的事情;使用以下方法解决:

      using Elmah;
      using ElmahErrorLogModule = Elmah.ErrorLogModule;
      
      namespace XXXX
      {
          public class ErrorLogModule : ElmahErrorLogModule
          {
              protected override void OnErrorSignaled(object sender, ErrorSignalEventArgs args)
              {
                  // Remove password from the server variables being serialized
                  args.Context.Request.ServerVariables.Remove("AUTH_PASSWORD");
      
                  //TODO: remove session id, cookie too?
      
                  base.OnErrorSignaled(sender, args);
              }
          }
      }
      

      并将web.config、configuration/system.webserver/modules中的ErrorLog模块更新为:

      <add name="ErrorLog" type="XXXX.ErrorLogModule" preCondition="managedHandler" />
      

      这将解决问题而无需第二次往返。如果随后从传入请求中使用密码,则不是问题,因为 Elmah 源显示它需要一个副本。

      我意识到这对上述内容的响应有点晚,但问题似乎已在当前 Elmah for ASP 中得到纠正,而不是 Elmah.Mvc nuget 包。

      【讨论】:

        【解决方案4】:

        我无法让@Dominic Birch 的答案起作用,因为上下文是只读的。相反,我从 ErrorLog(在我的例子中为 MySqlErrorLog)派生并在那里完成:

        public class FilteringMySqlErrorLog : MySqlErrorLog
        {
            static readonly string[] _stripSearch = new[] { "password", "cardnumber", "ccnumber", "cvv" };
        
            public FilteringMySqlErrorLog(IDictionary config)
                : base(config)
            { }
        
            public override string Log(Error error)
            {
                error.ServerVariables.Remove("AUTH_PASSWORD");
        
                foreach (string key in error.Form.AllKeys.ToList())
                {
                    if (_stripSearch.Any(x => key.IndexOf(x, StringComparison.InvariantCultureIgnoreCase) != -1))
                        error.Form.Remove(key);
                }
        
                return base.Log(error);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-05
          • 1970-01-01
          • 2022-10-14
          • 1970-01-01
          • 2021-12-31
          • 2011-08-29
          • 1970-01-01
          • 2018-10-17
          相关资源
          最近更新 更多