我有两个SQL查询,每次调用查询时,我都会尝试更新sup
和opp
值,分别为+1和-1。
首先查询:
query=update disc set sup=@sup, opp=@opp where did=@did
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 did=@did" ;
com.Parameters.AddWithValue("@did", did);
com.ExecuteNonQuery();
第二次注射查询是否有任何威胁,因为我与@sup
交换了sup+1
?
答案 0 :(得分:2)
不,第二个查询与第一个查询一样安全,因为它是完全参数化的,因此不会提供外部数据可以通过其输入SQL查询本身文本的路径。 sup+1
表达式由RDBMS计算,而不是由程序 * 计算,因此它无法提供将新代码注入现有SQL的机会。
* 并且随后不会将其呈现给SQL的exec
存储过程以进行重新解释。
答案 1 :(得分:1)
两个查询对Sql Injection同样安全,但
com.Parameters
总是更可取。
答案 2 :(得分:0)
第二次查询更好。
string query="update disc set sup=sup+1, opp=opp-1 where did=@did" ;
com.Parameters.AddWithValue("@did", didparameter);
com.ExecuteNonQuery();
答案 3 :(得分:0)
这两个查询都是安全的,但第二个更可取,因为你不需要添加额外的parameter
。
在第一个查询中,您可以找到您不需要的sup
和opp
的值。