动态SQL是否更容易受到SQL注入/黑客攻击?如果是,如何预防?
如果使用参数而不是字符串连接来指定过滤条件,则它不应该容易受到Sql注入的影响.
例如:
做这个:
string sqlQuery = "SELECT * FROM Persons WHERE Persons.Name LIKE @name"; SqlCommand cmd = new SqlCommand ( sqlQuery ); ... cmd.Parameters.Add ("@name", SqlDbType.VarChar).Value = aName + "%";
而不是这个:
string sqlQuery = "SELECT * FROM Persons WHERE Persons.Name LIKE \'" + aName + "%\'";
第一个例子不容易被sql注入,但第二个例子非常容易受到攻击.
这同样适用于您在存储过程中使用的动态SQL.在那里,您可以创建一个使用参数的动态sql语句; 然后,您应该使用动态语句sp_executesql
来指定参数.