2009-09-24 10 views
9

から「AUTH_PASSWORD」を削除する方法、私はELMAHによって捕獲されるからAUTH_PASSWORDを削除するための最良の方法を確認したいと思います。これを行う最善の方法は何ですか?かなり明白な理由からELMAHログ

答えて

9

ELMAHはオープンソースですので、私はError.CSはそうのようなファイルに変更。 Error.CS(ライン126程度)の誤差cunstructorの内部では、私はこれを追加しました:

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

私も大好きですな限り、私はあまりにも安い感じると思います。 –

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ファイルでのErrorLogモジュールを更新し、設定/ system.webserver /モジュールに:

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

これは、第二ラウンドトリップせずに問題を解決します。 Elmahのソースがコピーを受け取ると表示されるので、パスワードが引き続き着信要求から使用される場合は問題ありません。

私は、これは少し遅れて上記に対応している実感が、問題は、ASPのために、現在のELMAHで修正、およびないElmah.Mvc nugetパッケージのためにされているようです。

0

コンテキストが読み取り専用であるので、私は、@Dominicバーチの答えの作業を取得することができませんでした。代わりに、私は(私の場合、MySqlErrorLogに)のErrorLog由来し、そこにそれをやった:

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); 
    } 
} 
関連する問題