Frage

Für ziemlich offensichtliche Gründe, würde Ich mag die beste Art und Weise zu identifizieren, die AUTH_PASSWORD aus zu entfernen, indem ELMAH gefangen zu werden. Was ist der beste Weg, um zu tun, um zu gehen?

War es hilfreich?

Lösung

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

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

Andere Tipps

Ich habe es geschafft, dies zu tun, ohne die ELMAH Quelle zu ändern: http://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication- Teil-2 /

Ich traf nur das Gleiche; unter Verwendung der 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 wird das Problem ohne eine zweite Rundfahrt lösen. Kein Problem, wenn das Passwort anschließend von der eingehenden Anforderung verwendet wird, wie die Elmah Quelle zeigt es eine Kopie nimmt.

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

war ich nicht in der Lage @Dominic Birch Antwort zum Laufen zu bringen, weil Kontext nur lesbar ist. Stattdessen habe ich von der ErrorLog abgeleitet (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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top