一尘不染

就SQL注入而言,哪个SQL查询更安全

sql

我有两个SQL查询,其中每次调用时我都尝试用+1和-1分别更新supopp值。

第一个查询:

    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吗?


阅读 174

收藏
2021-03-08

共1个答案

一尘不染

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


*,并且随后不会提供给SQL的exec存储过程进行重新解释。

2021-03-08