哪个SQL查询在SQL注入方面更安全

时间:2012-12-18 11:35:07

标签: c# sql database sql-injection

我有两个SQL查询,每次调用查询时,我都会尝试更新supopp值,分别为+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

4 个答案:

答案 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。 在第一个查询中,您可以找到您不需要的supopp的值。