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