【发布时间】:2010-12-01 05:56:46
【问题描述】:
出于相当明显的原因,我想找出消除 Auth_Password 被 ELMAH 捕获的最佳方法。这样做的最佳方法是什么?
【问题讨论】:
出于相当明显的原因,我想找出消除 Auth_Password 被 ELMAH 捕获的最佳方法。这样做的最佳方法是什么?
【问题讨论】:
由于 ELMAH 是开源的,我像这样修改了 Error.CS 文件。在 Error.CS 的 Error cunstructor 内部(大约第 126 行),我添加了以下内容:
_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、configuration/system.webserver/modules中的ErrorLog模块更新为:
<add name="ErrorLog" type="XXXX.ErrorLogModule" preCondition="managedHandler" />
这将解决问题而无需第二次往返。如果随后从传入请求中使用密码,则不是问题,因为 Elmah 源显示它需要一个副本。
我意识到这对上述内容的响应有点晚,但问题似乎已在当前 Elmah for ASP 中得到纠正,而不是 Elmah.Mvc nuget 包。
【讨论】:
我无法让@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);
}
}
【讨论】: