2016-05-31 73 views
0

我正在嘗試使用密碼加密和在asp-mvc中驗證進行簡單登錄表單。使用javascript和剃鬚刀驗證密碼

我有以下的登錄表單(部分代碼只):

@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#視圖模型具有以下屬性

[Required(ErrorMessage = "Can't leave password field empty")] 
[DataType(DataType.Password)] 
[Display(Name = "Password")] 
public string Password { get; set; } 

當某人輸入密碼時,我會加密密碼,然後將其發送到服務器,但隨後驗證會計算加密密碼。

如何對密碼字段執行一些驗證並將錯誤顯示在Html.ValidationMessageFor點中?

+4

與你的問題有些不相干,但只是爲了讓你更新,**從不**依賴於客戶端哈希。 [它在發生服務器違規時非常危險](http://security.stackexchange.com/questions/53594/why-is-client-side-hashing-of-a-password-so-uncommon),即使它似乎符合客戶的利益。 –

+0

'MD5'不加密,它是一個單向散列函數。另外,它只是用'MD5'來散列密碼並不被認爲是安全的。你需要使用一個更好的散列函數,實際上是一個帶有鹽和迭代的HMAC來減緩攻擊者的速度。 'password_hash',Bcrypt'或'PBKDF2'都是好的密碼散列函數。 – zaph

回答

0

您可以驗證表單你通過執行以下操作更改密碼前:

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

}); 

如果驗證失敗,您將看到客戶端消息,如果成功,加密的密碼將傳遞給服務器。