かなり明白な理由から、Auth_Password が ELMAH によってキャプチャされないようにする最善の方法を特定したいと思います。そうするための最良の方法は何ですか?
4 に答える
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 /
コンテキストが読み取り専用であるため、@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);
}
}
私はちょうど同じことに遭遇しました。以下を使用して解決します。
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" />
これにより、2 回目の往復なしで問題が解決されます。Elmah ソースがコピーを取得することを示しているため、パスワードが着信要求から引き続き使用される場合は問題ありません。
上記への対応が遅くなりましたが、Elmah.Mvc nuget パッケージではなく、ASP 向けの現在の Elmah では問題が修正されているようです。