2013-07-20 46 views
0

我想編寫一個代碼,用戶可以通過該代碼在登錄後停用其帳戶。 在登錄頁面中,我創建了一個會話,並以頁面加載方式取消激活帳戶頁面。 這是我的刪除查詢,但沒有使用會話值。刪除語句中的會話值

String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"]+ "\'"; 
+1

此查詢引發許多許多紅旗。首先,SQL注入,正如其他人所說的。使用參數。其次,根據未經哈希的密碼刪除帳戶?我對你的應用程序瞭解不多,但請仔細閱讀「密碼散列」和「sql注入」,然後再進一步閱讀! –

回答

1

你需要確保你在查詢中使用之前session["email"]設置,並在不,你在它獲得價值。也可以使用參數來避免SQL injection。你可以閱讀這個article如何使用參數進行SQL查詢。

String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].ToString() + "\'"; 
+0

對於ToString不是真的。如果在像這樣的字符串表達式中使用非字符串對象,ToString()會自動執行。還有什麼被添加到SQL查詢? – Maarten

0

你錯過 「的ToString()」 會話[ 「電子郵件」]

這樣

session["email"].ToString() 

建議檢查會話可用後使用它

前法
if(Session["email"] != null) 
{ 
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].Tostring() + "\'"; 
} 
else 
{ 
    //session timeout 
} 

還有一件事,你的sql代碼會暴露給你sqlinjection .. 這是推薦指定您使用Parameterize執行sql查詢以避免sql注入。像這樣

if(Session["email"] != null) 
    { 
string password = txtPassword.Text; 
string email = Session["email"].Tostring(); 


    String SQLQuery = "DELETE FROM SignUp Where [email protected] AND [email protected]"; 
SqlCommand dbComm = new SqlCommand(SQLQuery , new SqlConnection()); 
dbComm.Parameters.Add("@pass", SqlDbType.NVarChar).Value = password ; 
dbComm.Parameters.Add("@pass", SqlDbType.NVarChar).Value = email ; 

//execute sql 
    } 
    else 
    { 
     //session timeout 
    } 
+0

我試過這種方法時,我調試了我的代碼字符串傳遞有價值,但字符串電子郵件沒有任何。我已經使用登錄控件的用戶名值等於會話值Session [「email」] = Login1.UserName; 此查詢給我錯誤必須聲明標量變量傳遞。 –

+0

if(Session [「email」]!= null)condtion爲true,但字符串電子郵件不包含任何內容 –

+0

對於ToString不是真實的。如果在像這樣的字符串表達式中使用非字符串對象,ToString()會自動執行。還有什麼被添加到SQL查詢? – Maarten