【问题标题】:Validating password using javascript and razor使用 javascript 和 razor 验证密码
【发布时间】: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


【解决方案1】:

如果您希望在客户端本身进行验证,则意味着尝试调用这两个 js 以及最新的 jquery 库。如果任何字段不满足条件意味着它将在客户端本身显示错误消息并且它不会打到服务器端编码..

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js

http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js

【讨论】:

    【解决方案2】:

    您可以在更改密码之前验证表单,方法是:

    $("#loginForm").submit(function (e) {
        if (!$("#loginForm").valid()) {
            return false;
        }
        var pass = $("#Password").val();
        var passMD5 = CryptoJS.MD5(pass);
        $("#Password").val(passMD5);
    
     });
    

    如果验证失败,您将看到客户端消息,如果验证成功,则会将加密密码传递给服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2019-06-27
      • 1970-01-01
      • 2011-08-14
      • 2013-12-09
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多