Database.SQLQuery命令和SQL注入中的String.Format

时间:2015-07-09 11:18:46

标签: sql asp.net-mvc sql-injection

我必须遵循以下规则:存储过程必须以"参数化方式执行"。我相信它的SQL注入保护。 我想知道以下代码是否可以被视为"参数化执行"并受SQL注入保护。

return Database.SqlQuery<Program>(
              String.Format("usp_GetPrograms {0},{1},{2},{3}", 
                              pID, pDisplayStart, pDisplayLength, pSearchString)
    ).ToList();

反正我可以把它重写成那样的东西

context.Database.SqlQuery<myEntityType>(
    "mySpName @param1, @param2, @param3",
    new SqlParameter("param1", param1),
    new SqlParameter("param2", param2),
    new SqlParameter("param3", param3)
);

Iam问,因为该程序已经完成并经过测试并准备投入生产,我不想重写代码并冒险破坏某些东西。

您如何看待这两种方法?

其他问题: 根据

是否需要SqlParameter()
  

https://msdn.microsoft.com/en-US/data/jj592907

&#34;从存储过程加载实体&#34;部分?

其他问题2: 我如何通过Nullable参数?

1 个答案:

答案 0 :(得分:3)

您首次尝试显示与参数化查询无关。它只是串联查询,对sql注入无效。

如果你真的关心sql注入,你必须使用第二种方法。