2012-12-18 30 views
3

我有兩個SQL查詢,我試圖在每次調用查詢時分別用+1和-1更新supopp值。哪個SQL查詢在SQL注入方面更安全

首先查詢:

query=update disc set [email protected], [email protected] where [email protected] 

    int sup=getnoofsup(did); 
    int opp = getnoofopp(did); 

    com.Parameters.AddWithValue("@sup", sups + 1); 
    com.Parameters.AddWithValue("@opp", opps - 1); 
    com.Parameters.AddWithValue("@did", did); 

    com.ExecuteNonQuery(); 

第二個查詢

string query="update disc set sup=sup+1, opp=opp-1 where [email protected]" ; 
com.Parameters.AddWithValue("@did", did); 

com.ExecuteNonQuery(); 

是否有注射第二查詢任何威脅,因爲我交流@supsup+1

回答

2

不,第二個查詢與第一個查詢同樣安全,因爲它是完全參數化的,因此沒有提供外部數據可以輸入SQL查詢本身文本的路徑。 sup+1表達式由RDBMS計算,而不是由您的程序*計算,因此它不能提供將新代碼注入現有SQL的機會。


*並沒有隨後提交給SQL的exec存儲過程的重新演繹。

+0

但第二個版本讓SQL服務器自己做增量。如果這可能會導致奇怪的錯誤或非法值,您可以使用第一個來檢查sup和opp是否可以正確遞增和遞減。 – Davio

+0

@Davio查詢可能會產生錯誤結果,但無法將其用於SQL注入。 – dasblinkenlight

1

兩個查詢是針對SQL注入同樣安全,但

com.Parameters 

常是優選的。

0

第二查詢比較好。

string query="update disc set sup=sup+1, opp=opp-1 where [email protected]" ; 
com.Parameters.AddWithValue("@did", didparameter); 
com.ExecuteNonQuery(); 
0

這兩個查詢都是安全的,但第二個是更可取的,因爲你不需要額外添加parameter。 在第一個查詢中查找您不需要的supopp的值。