Domanda

Per ragioni abbastanza ovvie, desidero identificare il modo migliore per rimuovere l'AUTH_PASSWORD venga catturato da ELMAH. Qual è il modo migliore per andare a fare così?

È stato utile?

Soluzione

Dal 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

Altri suggerimenti

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 nel web.config, configurazione / system.webServer / moduli a:

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

Questo risolverà il problema senza un secondo di andata e ritorno. Non è un problema se la password viene successivamente utilizzato dalla richiesta in arrivo come la fonte Elmah mostra ci vuole una copia.

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

Non ero in grado di ottenere la risposta di lavoro di @Dominic Birch, perché il contesto è in 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);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top