我可以防止我的 asp.net mvc-4 网络应用程序中的 Elmah 暴露用户的密码吗
Can i prevent Elmah inside my asp.net mvc-4 web aplication from exposing the users' passwords
当我开发我的第一个 asp.net 网络应用程序时,用户收到异常,我以为 IIS 会有关于异常的完整详细信息,但事实并非如此。我被告知要存储任何异常信息,我可以使用对我们有用的库名称 Elmah。但最近我检查了一个用户在登录我们的 asp.net mvc 后引发的异常,我发现 Elmah 将用户名和密码存储在 xml 文件中,如下所示:-
-<item name="__RequestVerificationToken">
<value string="X***************************81"/>
</item>
-<item name="UserName">
<value string="******"/>
</item>
-<item name="Password">
<value string="******"/>
</item>
-<item name="domains">
<value string="******"/>
</item>
-<item name="RememberMe">
<value string="true"/>
<value string="false"/>
</item>
</form>
在我们的例子中,asp.net mvc-4 提供了一个登录视图,输入 username/password 使用 ldap 连接字符串连接到我们的活动目录,这里是登录代码(不是确定是否有帮助):-
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Login(LoginModel model, string returnUrl)
{
MembershipProvider domainProvider;
domainProvider = Membership.Providers["DomainADMembershipProvider"];
if (ModelState.IsValid)
{
// Validate the user with the membership system.
if (domainProvider.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
List<String> domains2 = new List<String>();
domains2.Add("*****");
ViewBag.Domains = domains2;
return View(model);
}
return RedirectToLocal(returnUrl);
}
List<String> domains = new List<String>();
domains.Add("***");
ViewBag.Domains = domains;
return View(model);
}
这里是我们 web.config
中的 Elmah 组件:-
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
<appSettings>
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.disableHandleErrorFilter" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="false" />
<add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.allowedUsers" value="*" />
<add key="elmah.mvc.route" value="elmah" />
<add key="elmah.mvc.UserAuthCaseSensitive" value="true" />
</appSettings>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\elmaherrorlogs\" />
</elmah>
老实说,当用户遇到未处理的异常时,Elmah 帮了我们很多,但如果没有办法防止它暴露用户密码,那么我想我需要禁用它。
如果我们可以防止 Elmah 在异常 xml 文件中泄露用户密码,谁能提供建议?
谢谢
终于找到了我们在 MVC4 项目之一中使用的代码。将其放入您的 Global.asax.cs
文件中:
// remove Password field from logging
// http://blog.elmah.io/removing-sensitive-form-data-before-logging-to-elmah/
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) {
var httpContext = e.Context as HttpContext;
if (httpContext != null && httpContext.Request.Form.AllKeys.Any(k => k == "Password")) {
var error = new Error(e.Exception, httpContext);
error.Form.Set("Password", "******");
ErrorLog.GetDefault(httpContext).Log(error);
e.Dismiss();
}
}
elmah.io 中引用的博客似乎已更改,但该代码也可能有用。
当我开发我的第一个 asp.net 网络应用程序时,用户收到异常,我以为 IIS 会有关于异常的完整详细信息,但事实并非如此。我被告知要存储任何异常信息,我可以使用对我们有用的库名称 Elmah。但最近我检查了一个用户在登录我们的 asp.net mvc 后引发的异常,我发现 Elmah 将用户名和密码存储在 xml 文件中,如下所示:-
-<item name="__RequestVerificationToken">
<value string="X***************************81"/>
</item>
-<item name="UserName">
<value string="******"/>
</item>
-<item name="Password">
<value string="******"/>
</item>
-<item name="domains">
<value string="******"/>
</item>
-<item name="RememberMe">
<value string="true"/>
<value string="false"/>
</item>
</form>
在我们的例子中,asp.net mvc-4 提供了一个登录视图,输入 username/password 使用 ldap 连接字符串连接到我们的活动目录,这里是登录代码(不是确定是否有帮助):-
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
[ValidateInput(false)]
public ActionResult Login(LoginModel model, string returnUrl)
{
MembershipProvider domainProvider;
domainProvider = Membership.Providers["DomainADMembershipProvider"];
if (ModelState.IsValid)
{
// Validate the user with the membership system.
if (domainProvider.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
List<String> domains2 = new List<String>();
domains2.Add("*****");
ViewBag.Domains = domains2;
return View(model);
}
return RedirectToLocal(returnUrl);
}
List<String> domains = new List<String>();
domains.Add("***");
ViewBag.Domains = domains;
return View(model);
}
这里是我们 web.config
中的 Elmah 组件:-
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
<appSettings>
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.disableHandleErrorFilter" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="false" />
<add key="elmah.mvc.IgnoreDefaultRoute" value="false" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.allowedUsers" value="*" />
<add key="elmah.mvc.route" value="elmah" />
<add key="elmah.mvc.UserAuthCaseSensitive" value="true" />
</appSettings>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="C:\elmaherrorlogs\" />
</elmah>
老实说,当用户遇到未处理的异常时,Elmah 帮了我们很多,但如果没有办法防止它暴露用户密码,那么我想我需要禁用它。
如果我们可以防止 Elmah 在异常 xml 文件中泄露用户密码,谁能提供建议? 谢谢
终于找到了我们在 MVC4 项目之一中使用的代码。将其放入您的 Global.asax.cs
文件中:
// remove Password field from logging
// http://blog.elmah.io/removing-sensitive-form-data-before-logging-to-elmah/
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) {
var httpContext = e.Context as HttpContext;
if (httpContext != null && httpContext.Request.Form.AllKeys.Any(k => k == "Password")) {
var error = new Error(e.Exception, httpContext);
error.Form.Set("Password", "******");
ErrorLog.GetDefault(httpContext).Log(error);
e.Dismiss();
}
}
elmah.io 中引用的博客似乎已更改,但该代码也可能有用。