首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ASP.NET 登錄驗證失敗:密碼字段尾部空格導致比對不通過

     編輯:程式設計疑難解答

現象

註冊寫入數據庫成功,但登錄時密碼比對失敗;註釋密碼判斷則能登錄。

根本原因

數據庫中 PassWord 字段定義為 char(n) 或 nchar(n),**定長類型會在存儲時右側填充空格**至指定長度。讀取時 myReader["PassWord"].ToString() 包含尾部空格,與用戶輸入的無空格密碼不匹配。

解決方案

  1. 修改表結構(推薦):將密碼列改為 varchar(n) / nvarchar(n),避免空格填充。
  2. 代碼層面 Trim:
    string dbPwd = myReader["PassWord"].ToString().Trim();
    if (dbPwd == password) { success = true; }
    
  3. 參數化查詢防注入:
    SqlCommand cmd = new SqlCommand("SELECT PassWord FROM userinfo WHERE UserName=@u", conn);
    cmd.Parameters.AddWithValue("@u", username);
    

最佳實踐

  • **絕不存儲明文密碼**,使用 BCrypt/Argon2 哈希存儲,驗證時比對哈希值。
  • 統一使用 nvarchar 存儲可變長文本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved