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

ASP.NET 登錄頁驗證用戶名密碼:參數化查詢防注入完整示例

     編輯:程式設計綜合問答

ASP.NET (WebForms) 登錄頁核心:參數化 SQL + 安全密碼驗證 + 會話管理。切勿拼接字符串!

完整代碼 (C# + SQL Server)

protected void btnLogin_Click(object sender, EventArgs e) {
    string connStr = ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString;
    string sql = "SELECT COUNT(1) FROM Users WHERE Username=@u AND PasswordHash=@p";
    
    using (SqlConnection conn = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand(sql, conn)) {
        cmd.Parameters.AddWithValue("@u", txtUser.Text.Trim());
        // 實際應存儲 BCrypt/Argon2 雜值,此處演示明文對比
        cmd.Parameters.AddWithValue("@p", txtPwd.Text); // TODO: Hash 驗證
        
        conn.Open();
        int count = (int)cmd.ExecuteScalar();
        if (count > 0) {
            Session["User"] = txtUser.Text.Trim();
            Response.Redirect("~/Dashboard.aspx");
        } else {
            lblMsg.Text = "用戶名或密碼錯誤";
        }
    }
}

安全增強清單

  1. 密碼雜湊:註冊時 BCrypt.Net.BCrypt.HashPassword(pwd),登錄時 BCrypt.Net.BCrypt.Verify(pwd, hash)。
  2. 防暴力破解:失敗計數存 Session/Redis,超 5 次鎖定 15 分鐘 + 驗證碼。
  3. HTTPS 強制:web.config `` 或負載均衡層終止 SSL。
  4. SqlParameter 類型化:`cmd.Parameters.Add("@u", SqlDbType.NVarChar, 50).Value = ...` 避免隱式轉換計劃緩存污染。

Web.config 連接字符串

<connectionStrings>
  <add name="MyDb" connectionString="Server=.;Database=MyApp;User=sa;Password=StrongPwd;Encrypt=True;TrustServerCertificate=False;" providerName="System.Data.SqlClient" />
</connectionStrings>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved