我有數據庫功能,它選擇不同的條件數據。有兩種可能的方法來實現這一點。 首先哪個更好的方法來停止sql注入
public string select(string name)
{
string s = null;
query = "select * from tablename where [email protected]";
con.Open();
com=new SqlCeCommand(query,con);
com.Parameters.AddWithValue("@name",name);
sdr=com.ExecuteReader();
while (sdr.Read())
{
s = sdr.GetString(0);
}
return s;
}
在這種方法中,我需要在查詢,如訂單的地名或在查詢多個參數變化小的,地址,前20名等代碼的不同功能,但這種方法固定在sql注入方面。 二
public string select(string query)
{
string s = null;
con.Open();
com=new SqlCeCommand(query,con);
sdr=com.ExecuteReader();
while (sdr.Read())
{
s = sdr.GetString(0);
}
return s;
}
在第二種方法我通過數據庫查詢與值函數的參數,所以我不需要com.Parameters.AddWithValue("@name",name);
,並不需要爲選擇查詢的變化代碼的不同功能。查詢中的參數值由代碼而不是由用戶給出。由於用戶未給出參數輸入,因此可以使用此方法進行sql注入。
哪一個是安全的,高效的,因爲我的應用程序無法承受數據丟失。
我結合之前,我曾經通過數據持久層驗證長。在我達到這一點之前,我會拒絕它。 – duffymo 2013-04-30 12:41:49
Imho第一種方法更好 €:duffymo是正確的,檢查你的輸入。 – jAC 2013-04-30 12:41:53