下面的代码容易被sql注入吗?据我所知,CommandBuilder在生成SELECT / UPDATE / INSERT命令时总是使用参数化查询。
using (var dataAdapter = new SqlDataAdapter(selectCommand))
using (var cmdBuilder = new SqlCommandBuilder(dataAdapter))
{
cmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;
using (var dataset = new DataSet())
{
dataAdapter.UpdateBatchSize = 0;
dataAdapter.AcceptChangesDuringFill = false;
dataAdapter.AcceptChangesDuringUpdate = false;
stopwatch.Start();
dataAdapter.Fill(dataset, "ABC");
dataset.AcceptChanges();
ds.tables[0].Rows["ABC"] = MALICIOUS SQL INJECTION ATTEMPT; // let's
say this is where the end user could slip malicious string he wanted
into
dataAdapter.Update(dataset, " ABC");
}
}发布于 2016-04-01 01:34:22
CommandBuilders在生成insert、update和delete语句时使用参数化查询。因此,您不会受到来自它们的SQL注入攻击。在参数化查询中,解析带有参数标记的SQL语句,然后单独推送参数。参数中的值不会被SQL查询解析器解析,因此代码路径中没有任何地方可以进行注入。
另一个要考虑的选择是使用ORM (对象关系映射器),如实体框架或更轻量级的Dapper。
https://stackoverflow.com/questions/36339846
复制相似问题