Question

Pour des raisons assez évidentes, je voudrais identifier la meilleure façon d'enlever la AUTH_PASSWORD d'être capturé par ELMAH. Quelle est la meilleure façon de s'y prendre pour le faire?

Était-ce utile?

La solution

Depuis ELMAH est open source, j'ai modifié le fichier Error.CS comme ainsi. A l'intérieur de la cunstructor d'erreur de Error.CS (autour de la ligne 126), j'ajouté ceci:

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

Autres conseils

Je viens rencontrais la même chose; résolu en utilisant ce qui suit:

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

et mis à jour le module ErrorLog dans web.config, configuration / modules / system.webServer à:

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

Cela permettra de résoudre le problème sans un deuxième aller-retour. Pas un problème si le mot de passe est utilisé par la suite de la requête entrante comme source Elmah montre qu'il faut une copie.

Je sais que c'est un peu en retard en réponse à ce qui précède, mais le problème semble avoir été corrigé dans Elmah en cours pour ASP, et non pour le paquet de Elmah.Mvc NuGet.

Je n'ai pas pu obtenir le travail de réponse @Dominic Birch, parce que le contexte est en lecture seule. Au lieu de cela, je tirais de la ErrorLog (dans mon cas, MySqlErrorLog) et fait 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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top