【发布时间】:2016-05-31 20:27:40
【问题描述】:
我正在尝试使用 asp-mvc 中的密码加密和验证制作一个简单的登录表单。
我有以下登录表单(仅部分代码):
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "loginForm" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
//some fields
...
// password
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
@Html.ValidationMessageFor(model => model.Password)
</div>
//some fields
...
}
此外,我还有以下 javascript 代码(我知道加密不是最安全的方式,但这对我来说已经足够了)
$("#loginForm").submit(function (e) {
var pass = $("#Password").val();
var passMD5 = CryptoJS.MD5(pass);
$("#Password").val(passMD5);
});
还有一个具有以下属性的 C# ViewModel
[Required(ErrorMessage = "Can't leave password field empty")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
当有人输入密码时,我会对密码进行加密,然后将其发送到服务器,但随后会针对加密密码计算验证。
如何对密码字段执行一些验证,并在 Html.ValidationMessageFor 位置显示错误?
【问题讨论】:
-
与您的问题有些无关,但为了让您了解最新情况,从不依赖客户端散列。 Its very dangerous in the event of a server breach 尽管这似乎符合客户的利益。
-
MD5不是加密,它是一种单向哈希函数。此外,仅使用MD5对密码进行哈希处理是不安全的。您需要使用更好的哈希函数,实际上是一个带有盐和迭代的 HMAC 来减缓攻击者的速度。password_hash、Bcrypt` 或PBKDF2都是很好的密码哈希函数。
标签: javascript c# jquery asp.net-mvc razor