【问题标题】:Do I need to use parametrized queries when calling ExectureStoreQuery to avoid SQL Injections?调用 ExecuteStoreQuery 时是否需要使用参数化查询以避免 SQL 注入?
【发布时间】:2012-06-01 03:13:00
【问题描述】:

我想知道在ExecuteStoredProcedure执行sql时是否需要使用参数化查询来防止SQL注入攻击?

根据这个MSDN link,我应该使用参数。

根据这个other MSDN link,使用{0}的sql字符串相当于使用参数。

那么在我的 SQL 语句中只包含 {0}、{1} 等真的可以吗:

var rv = _context.ExecuteStoreQuery<int>("select ID from table where typeID = {0}", typeID);

或者我需要:

     var param = new SqlParameter("@typeID", SqlDbType.Int);
     param.Value = typeID;
     var rv = _context.ExecuteStoreQuery<int>("select ID from table where typeID = @typeID", param);

【问题讨论】:

  • 您不使用存储过程是否有原因?

标签: entity-framework-4 sql-injection executestorequery


【解决方案1】:

基本上可以归结为这一点。您是否正在重用查询,有许多调用但 typeID 的值不同?那么是的,它可能会对性能产生微小的影响。

另一方面,如果您只进行一次调用,那么大部分性能损失将是您的数据库调用。

就我个人而言,我还没有看到这对我过去 8 到 10 年编写的任何代码产生了明显的影响。

所以我投票 - 不要打扰。

【讨论】:

  • 我不是在问性能,而是第一种类型的语句是否容易受到 sql 注入攻击。我已更新问题以反映这一点。
  • 那么为什么不把它放在你的问题中呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2021-11-16
相关资源
最近更新 更多