Pregunta

Por razones bastante obvias, me gustaría identificar la mejor manera de eliminar la AUTH_PASSWORD de ser capturado por ELMAH. ¿Cuál es la mejor manera de ir sobre hacerlo?

¿Fue útil?

Solución

Desde ELMAH es de código abierto, he modificado el archivo de Error.CS como tal. En el interior de la cunstructor Error de Error.CS (alrededor de la línea 126), añadí esto:

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

Otros consejos

Me las he arreglado para hacer esto sin modificar la fuente ELMAH: http://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication- parte-2 /

Yo sólo encontré con lo mismo; resuelto usando la siguiente:

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

Y actualizado el módulo ErrorLog en web.config, configuración / system.webServer / módulos a:

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

Esto va a resolver el problema sin un segundo de ida y vuelta. No es un problema si la contraseña se utiliza posteriormente para las peticiones entrantes como la fuente Elmah muestra que se necesita una copia.

Me di cuenta que es un poco tarde en respuesta a lo anterior, pero el problema parece haber sido corregido en la corriente Elmah para ASP, y no para el paquete de Nuget Elmah.Mvc.

Yo no era capaz de conseguir trabajo respuesta de @Dominic Birch, porque el contexto es de sólo lectura. En su lugar, derivado de la ErrorLog (en mi caso, MySqlErrorLog) y lo hice allí:

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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top