【问题标题】:MVC password best practicesMVC 密码最佳实践
【发布时间】:2014-08-13 19:51:50
【问题描述】:

我有一个登录表单,其中包含一个用于密码的剃须刀字段。 我的网站在 https 上。

一切正常,直到有人在基本控制器的 OnException(ExceptionContext filterContext) 下添加此代码:

        string[] keys = filterContext.HttpContext.Request.Form.AllKeys;
        var valueMap = new List<KeyValuePair<string, string>>();
        foreach (var key in keys)
        {
            valueMap.Add(new KeyValuePair<string, string>(key, filterContext.HttpContext.Request.Form[key]));
        }

        if (valueMap.Any())
        {
            sb.AppendLine("POST Parameters : ");
            foreach (var keyValuePair in valueMap)
            {
                sb.AppendLine(string.Format("   - {0} : {1}", keyValuePair.Key, keyValuePair.Value));
            }
        }

然后向支持人员发送一封包含字符串生成器内容的电子邮件。 密码已包含在邮件中。

我不希望这种情况再次发生。

什么是最好的解决方案? MVC4 中是否有内置的东西来处理这种情况? 我必须在表单上使用 JS 密码加密吗?

【问题讨论】:

  • 不清楚是什么问题,不想再发生什么情况?
  • 简单的解决方案是跳过其中包含“密码”一词的键,或者其他标识表单中密码字段的键。
  • 通过电子邮件发送内容 OnException 似乎是一个非常糟糕的主意。你为什么不使用HandleErrorAttribute
  • 当有人使用安全网站时,他们希望他们的数据(无论是密码还是他们输入的任何其他内容)都是如此。安全的!不会因为您的代码引发异常而暴露。您应该删除此代码或让自己成为一名优秀的律师。

标签: c# asp.net-mvc password-protection


【解决方案1】:

不,不要在表单上添加加密,这样做需要您在使用之前解密数据,这仍然不能真正解决您关心的问题。我建议您修改该异常处理程序以跳过密码字段。如果您的网站接受信用卡,您可能也希望对这些字段进行类似的处理。

【讨论】:

  • 现在我有类似的东西,但是根据它的名字它接缝有点脆弱
  • 如果您使用视图模型或类似方法传递数据,您可能会发现。用反射和属性解决问题。 (我可能会尝试这样做)但我从来没有需要,所以这不是我已经解决的问题
  • 我不会跳过它们,我宁愿用固定值替换它们。这样您就可以在不了解密码值的情况下看到密码存在。
  • @CodesInChaos Good Call,在其他技术中这样做时我已经完成了 之类的操作
猜你喜欢
  • 2011-03-08
  • 2013-05-29
  • 2011-03-26
  • 2011-02-04
  • 2013-12-09
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
相关资源
最近更新 更多