PetaPoco的Query(字符串查询,参数)方法是否可以防止SQL注入?

时间:2017-07-04 13:24:56

标签: c# .net sql-injection petapoco

PetaPoco's home page中,提到PetaPoco的SQL Builder(Sql对象)可以防止SQL注入。但Query(字符串查询,参数)方法是否可以防止SQL注入?

SQL Builder是安全的:

var id = 123;
var a = db.Query<article>(PetaPoco.Sql.Builder
  .Append("SELECT * FROM articles")
  .Append("WHERE article_id=@0", id)
);

但是字符串查询是否安全,其中参数是这样传递的?

var id = 123;
var a = db.Query<article>("SELECT * FROM articles WHERE article_id=@0", id);

1 个答案:

答案 0 :(得分:3)

是的,它可以防止SQL注入。

如果您不确定,可以通过在正在执行的SQL上运行SQL跟踪来验证这一点。或者在其中提供一些带有单引号和双引号的输入(针对nvarchar列)并查看是否发生运行时异常(如果SQL注入有问题会发生这种情况)。

另见https://github.com/CollaboratingPlatypus/PetaPoco/issues/326#issuecomment-238538854

  

这是正确的行为。 SQL和参数传递给   DB命令可以防止基于注入的攻击。连接的数据库   将以安全的方式将SQL和参数放在一起