【问题标题】:Html.PasswordFor is not populated?Html.PasswordFor 没有填充?
【发布时间】:2012-02-28 23:52:06
【问题描述】:

我花了很多时间,试图用剃刀般的表达来理解为什么

@HTML.PasswordFor( m => m.Password)

我无法从模型中设置值,这是我发现它通过像这样的 html 属性注入值的唯一解决方案

@HTML.PasswordFor( m => m.Password, new { value = Model.Password })

我做错了什么吗?是正确的帮手??这是现场模型配置

[Required(ErrorMessage = "La contraseña es obligatoria.")]
[StringLength(100, ErrorMessage = "El {0} debe tener al menos {2} caracteres de longitud.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Contraseña")]
public string Password { get; set; }

这是唯一的解决方案?

【问题讨论】:

  • 此行为是设计使然。不要在 HTTP 请求中向下游发送密码
  • 考虑到您刚刚通过同一条线路收到密码的情况,这没有任何意义。任何想要拦截密码的人都已经拥有它,因此不允许通过网络将其发送回没有任何好处,并且会给用户带来不便。糟糕的设计选择恕我直言。
  • 提供您实施 SSL(您应该是)的线路是安全的。 另一方面,浏览器并不安全。因此,不要将密码放入标记中是非常有意义的。任何人都不应该知道您的密码,即使是管理员也不应该知道(他们应该立即被散列)。您可以想象,最近所有的密码泄露事件都会告诉人们,不认真对待这种事情是个坏主意。

标签: c# asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

这是一项安全功能。要完成这项工作意味着a)您能够以纯文本形式访问用户密码,并且b)通过网络将其传输到他们的浏览器。

这两种方法都不安全,不应鼓励。

因此,这是 Razor 的一项功能,而不是问题。

【讨论】:

  • 虽然不应该鼓励,但使用密码输入类型是有正当理由的,例如用户需要访问的屏蔽键。就我而言,我使用密码输入类型来隐藏密钥,然后让用户打开/关闭它。为了解决这个问题,我创建了一个名为 value 的新 HTML 属性并以这种方式设置值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2016-04-06
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多