调用 ExectureStoreQuery 时是否需要使用参数化查询以避免 SQL 注入?



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

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

根据此其他 MSDN 链接,使用 {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);

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

另一方面,如果您只进行这一次调用,则大部分性能影响将是您的数据库调用。

就我个人而言,我还没有看到这在过去 8-10 年里对我编写的任何代码产生切实的影响。

所以我投票 - 不要打扰。

相关内容

  • 没有找到相关文章

最新更新