首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET MVC 安全機制實作:帳號模型、驗證屬性與認證流程完整解析

     編輯:ASP.NET 基礎

ASP.NET MVC 安全機制實作指南


透過建構 Internet 應用程式,深入理解 MVC 安全架構:帳號模型設計、資料註解驗證、密碼政策與認證流程。


Models 資料夾與帳號模型架構

Models 資料夾集中管理應用程式的資料模型。Visual Web Developer 專案範本自動產生 AccountModels.cs,包含三大核心模型類別:

  • LogOnModel - 登入驗證模型
  • RegisterModel - 註冊資料模型
  • ChangePasswordModel - 變更密碼模型

AccountModels 類別圖

核心模型類別詳細設計

ChangePasswordModel - 變更密碼模型

public class ChangePasswordModel
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "目前密碼")]
    public string OldPassword { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "{0} 至少需 {2} 個字元。", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "新密碼")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "確認新密碼")]
    [Compare("NewPassword", ErrorMessage = "新密碼與確認密碼不相符。")]
    public string ConfirmPassword { get; set; }
}

設計重點:

  • Required:必填欄位驗證
  • DataType.Password:瀏覽器以密碼模式顯示(隱藏字元)
  • StringLength:長度限制與自訂錯誤訊息
  • Compare:交叉欄位比對驗證

LogOnModel - 登入模型

public class LogOnModel
{
    [Required]
    [Display(Name = "使用者名稱")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "密碼")]
    public string Password { get; set; }

    [Display(Name = "記住我?")]
    public bool RememberMe { get; set; }
}

關鍵屬性: RememberMe 控制是否發出持久性驗證 Cookie。

RegisterModel - 註冊模型

public class RegisterModel
{
    [Required]
    [Display(Name = "使用者名稱")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "電子郵件")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "{0} 至少需 {2} 個字元。", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "密碼")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "確認密碼")]
    [Compare("Password", ErrorMessage = "密碼與確認密碼不相符。")]
    public string ConfirmPassword { get; set; }
}

增強安全性: 使用 DataType.EmailAddress 驗證信箱格式,搭配 Compare 確保密碼一致性。

資料註解驗證屬性速查表

屬性用途範例
Required必填驗證[Required]
StringLength字串長度限制[StringLength(100, MinimumLength=6)]
RegularExpression正則表達式驗證[RegularExpression(@"^\d{4}-\d{2}-\d{2}$")]
Range數值範圍驗證[Range(18, 100)]
DataType資料類型提示[DataType(DataType.EmailAddress)]
Compare欄位比對驗證[Compare("Password")]
Display顯示名稱自訂[Display(Name="使用者名稱")]
Remote遠端伺服器驗證[Remote("CheckUserName", "Account")]

安全性最佳實務建議

  1. 密碼雜湊儲存:絕不儲存明文密碼,使用 BCrypt、PBKDF2 或 ASP.NET Identity 內建雜湊
  2. HTTPS 強制:登入、註冊、變更密碼頁面必須強制 SSL
  3. 防暴力破解:實作登入失敗鎖定機制、CAPTCHA 驗證
  4. CSRF 防護:表單加入 @Html.AntiForgeryToken(),Action 標註 [ValidateAntiForgeryToken]
  5. 輸入清理:防止 XSS 攻擊,Razor 自動編碼輸出,避免使用 @Html.Raw()
  6. 授權屬性:使用 [Authorize]、[Authorize(Roles="Admin")] 控制存取權限

後續擴充方向

  • 整合 ASP.NET Identity 2.0+ 取得完整身分識別管理
  • 實作 OAuth/OpenID Connect 第三方登入(Google、Facebook、Microsoft)
  • 雙因子驗證(2FA)與密碼重設流程
  • 審計日誌與安全事件監控
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved