Per ragioni abbastanza ovvie, vorrei identificare il modo migliore per rimuovere Auth_Password da essere catturato da ELMAH. Qual è il modo migliore per farlo?Come rimuovere "Auth_Password" dai log ELMAH
risposta
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
sono riuscito a fare questo senza modificare la fonte ELMAH: http://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication-part-2/
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.
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);
}
}
Per quanto mi piacerebbe troppo, mi sentirei troppo a buon mercato. –