3

我有两个 SQL 查询,每次调用查询时,我都在尝试更新sup和值分别为 +1 和 -1。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因为我交换,第二次注入查询是否有任何威胁sup+1

4

4 回答 4

2

不,第二个查询与第一个查询一样安全,因为它是完全参数化的,因此不提供外部数据可以输入 SQL 查询本身文本的路径。该sup+1表达式由 RDBMS 计算,而不是由您的程序*计算,因此它不能提供将新代码注入现有 SQL 的机会。


*并且它不会随后呈现给 SQL 的exec存储过程进行重新解释。

于 2012-12-18T11:37:50.673 回答
1

这两个查询对于 Sql 注入同样安全,但是

com.Parameters

总是更可取。

于 2012-12-18T11:38:47.150 回答
0

第二个查询更好。

string query="update disc set sup=sup+1, opp=opp-1 where did=@did" ;
com.Parameters.AddWithValue("@did", didparameter);
com.ExecuteNonQuery();
于 2012-12-18T11:40:39.380 回答
0

这两个查询都是安全的,但第二个更可取,因为您不需要添加额外的parameter。在第一个查询中,您找到了您不需要的值sup和值。opp

于 2012-12-24T09:41:01.997 回答