2009-09-24 5 views

risposta

9

Dato che ELMAH è open source, ho modificato il file Error.CS in questo modo. All'interno della cunstructor Errore di Error.CS (sulla linea 126), ho aggiunto questo:

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

Per quanto mi piacerebbe troppo, mi sentirei troppo a buon mercato. –

0

Ho appena incontrato la stessa cosa ; risolto utilizzando la seguente:

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

E aggiornato il modulo ErrorLog in web.config, configurazione/system.webServer/moduli:

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

Questo risolve il problema senza un secondo giro. Non è un problema se la password viene successivamente utilizzata dalla richiesta in arrivo poiché la fonte Elmah mostra che ne prende una copia.

Mi rendo conto che è un po 'tardi in risposta a quanto sopra, ma il problema sembra essere stato corretto in Elmah corrente per ASP e non per il pacchetto nuget Elmah.Mvc.

0

Non sono riuscito a ottenere la risposta di @Dominic Birch, perché il contesto è di sola lettura. Invece, ho derivato dal ErrorLog (nel mio caso, MySqlErrorLog) e ha fatto lì:

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