Pour des raisons assez évidentes, je voudrais identifier la meilleure façon de retirer le mot de passe Auth_PASSword d'être capturé par ELMAH. Quel est le meilleur moyen de le faire?Comment faire pour supprimer "Auth_Password" de journaux ELMAH
Répondre
Puisque ELMAH est open source, j'ai modifié le fichier Error.CS comme ça. A l'intérieur de l'erreur cunstructor de Error.CS (environ ligne 126), j'ai ajouté ceci:
_serverVariables.Remove(AUTH_PASSWORD);
//AUTH_PASSWORD = const string = "AUTH_PASSWORD" AND SET ELSEWHERE
J'ai réussi à le faire sans modifier la source ELMAH: http://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication-part-2/
Je viens rencontrais la même chose ; résolu en utilisant les éléments suivants:
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/system.webServer/modules:
<add name="ErrorLog" type="XXXX.ErrorLogModule" preCondition="managedHandler" />
Cela permettra de résoudre le problème sans un deuxième aller-retour. Pas de problème si le mot de passe est ensuite utilisé à partir de la requête entrante comme le montre la source Elmah qui en prend une copie.
Je me rends compte que c'est un peu en retard en réponse à ce qui précède, mais le problème semble avoir été corrigé dans l'actuel Elmah pour ASP, et non pour le paquet de nuget Elmah.Mvc.
Je n'ai pas réussi à obtenir la réponse de @Dominic Birch, car 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);
}
}
Autant que j'aimerais aussi, je me sentirais trop pas cher. –