我正在做一個項目,我需要爲學校網站製作VLE系統。我正在使用visual web developer 2008,C#和一個SQL數據庫。我需要做的是當學生使用他們的用戶名和密碼登錄時,他們應該從數據庫中顯示他們的特定信息(例如SQL的課程名稱,學生ID,電子郵件和姓名等)我已經創建了登錄頁面:登錄後從數據庫中獲取用戶特定信息
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["RegConnectionString"].ConnectionString);
con.Open();
string cmdStr = "select count (*) from Registration where UserName ='" + TextBox1.Text + "'";
SqlCommand checkuser = new SqlCommand(cmdStr, con);
int temp = Convert.ToInt32(checkuser.ExecuteScalar().ToString());
if (temp == 1)
{
String cmdStr2 = "select password from Registration where UserName ='" + TextBox1.Text + "'";
SqlCommand pass = new SqlCommand(cmdStr2, con);
String password = pass.ExecuteScalar().ToString();
con.Close();
if (password == TextBox2.Text)
{
Session["New"] = TextBox1.Text;
Response.Redirect("secure.aspx");
}
else
{
Label1.Visible = true;
Label1.Text = "Invalid Password....!!!";
}
}
else
{
Label1.Visible = true;
Label1.Text = "Invalid UserName....!!!";
}
}
它被認爲是「壞」的專門報告「密碼無效」或「無效的用戶名」。原因在於,當他們獲得正確的用戶名時,它可以讓敵對者知道。在進行登錄功能時,有幾套最佳實踐可幫助開發人員避免常見問題,例如「不要以純文本存儲密碼」。網上搜索並不需要太多搜索。 – StarPilot
將任何舊文本追加到數據庫查詢中對安全(易受SQL注入攻擊)和性能(無法重新使用查詢計劃)不利。任何人都可以用你的代碼破壞你的數據庫。執行此操作的正確方法是參數化查詢 - 有關SQL注入的一些良好背景,請參見[this](http://www.sommarskog.se/dynamic_sql.html#SQL_injection)。 – Bridge
使用此參考 http://www.codeproject.com/Articles/12907/Simple-Stored-Procedures-in-NET – neo