2009-09-24 74 views

回答

9

由於ELMAH是開源的,我修改了Error.CS文件。裏面Error.CS的錯誤cunstructor(約126行),我添加了這個:

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

儘管我也很喜歡,但我覺得太便宜了。 – 2009-09-25 03:36:00

0

我只是遇到了同樣的事情;使用以下解決:

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中的錯誤日誌模塊,配置/ system.webserver /模塊:

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

這將解決這個問題,而第二個往返。如果隨後從傳入請求中使用密碼,則不會有問題,因爲Elmah源代碼顯示它需要副本。

我意識到這是有點遲來回應上述,但問題似乎已被糾正在目前的Elmah爲ASP,而不是爲Elmah.Mvc nuget包。

0

我無法獲得@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); 
    } 
}