2009-09-24 7 views

Antwort

9

Da ELMAH Open Source ist, habe ich die Error.CS Datei so modifiziert. Innerhalb des Fehler cunstructor von Error.CS (etwa Zeile 126), habe ich dies:

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

So sehr ich auch lieben würde ich zu billig fühlen würde. –

0

ich die gleiche Sache nur begegnet ; mit dem folgenden gelöst:

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); 
     } 
    } 
} 

Und das ErrorLog Modul in web.config aktualisiert, Konfiguration/system.webServer/Module:

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

das Problem ohne eine zweite Rundfahrt Dies wird lösen. Kein Problem, wenn das Passwort später von der eingehenden Anfrage verwendet wird, wie die Elmah-Quelle zeigt, dass es eine Kopie braucht.

Ich weiß, dies ist ein bisschen spät als Reaktion auf die oben genannten, aber das Problem scheint in der aktuellen Elmah für ASP korrigiert worden, und nicht für Elmah.Mvc nugget Paket.

0

Ich konnte @ Dominique Birchs Antwort nicht funktionieren, weil der Kontext schreibgeschützt ist. Stattdessen abgeleitet ich von der ErrorLog (in meinem Fall, MySqlErrorLog) und habe es dort:

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); 
    } 
} 
Verwandte Themen