2009-09-24 8 views

Répondre

9

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 
+1

Autant que j'aimerais aussi, je me sentirais trop pas cher. –

0

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.

0

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