9

出于相当明显的原因,我想确定从 ELMAH 捕获的 Auth_Password 中删除的最佳方法。这样做的最佳方法是什么?

4

4 回答 4

9

由于 ELMAH 是开源的,所以我像这样修改了 Error.CS 文件。在 Error.CS 的 Error cunstructor 内部(大约第 126 行),我添加了以下内容:

_serverVariables.Remove(AUTH_PASSWORD);
//AUTH_PASSWORD = const string = "AUTH_PASSWORD" AND SET ELSEWHERE
于 2009-09-24T21:38:31.923 回答
1

我设法在不修改 ELMAH 源的情况下做到了这一点:http ://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication-part-2 /

于 2012-01-06T10:29:12.273 回答
0

我刚遇到同样的事情;使用以下方法解决:

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

并将 web.config、configuration/system.webserver/modules 中的 ErrorLog 模块更新为:

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

这将在没有第二次往返的情况下解决问题。如果随后从传入请求中使用密码,这不是问题,因为 Elmah 源显示它需要一个副本。

我意识到这对上述内容的响应有点晚了,但问题似乎已经在当前的 Elmah for ASP 中得到纠正,而不是 Elmah.Mvc nuget 包。

于 2014-07-23T15:15:50.367 回答
0

我无法让@Dominic Birch 的答案起作用,因为上下文是只读的。相反,我从 ErrorLog(在我的例子中是 MySqlErrorLog)派生并在那里做了:

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);
    }
}
于 2015-11-17T05:51:41.007 回答