相当显而易见的原因,我想确定最佳方法,以消除Auth_Password从被抓获的ELMAH.什么是最好的方式去这样做?

有帮助吗?

解决方案

由于ELMAH是开源的,我修改了文件Error.CS像这样。内部Error.CS的错误cunstructor(约126行),I加入这样的:

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

其他提示

我已经成功地做到这一点,而不修改ELMAH资料来源: http://www.kipusoep.nl/2012/01/06/umbraco-elmah-with-sql-ce-4-0-and-authentication-part-2/

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

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中的错误日志模块,配置/ system.webserver /模块:

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

这将解决这个问题没有第二往返。不是如果密码随后从传入的请求用作ELMAH源表示它需要一个拷贝的问题。

我意识到这是有些迟响应于上述情况,但问题似乎已经在当前用于ELMAH ASP被修正,而不是为了Elmah.Mvc NuGet包。

我是不是能够得到@Dominic桦木的答复工作,因为背景是只读的。相反,我从错误日志(在我的情况下,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);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top