PetaPoco 的 Query(string query,parameters) 方法是否可以防止 SQL 注入?

Las*_*tio 4 .net c# sql-injection petapoco

PetaPoco 的主页中提到 PetaPoco 的 SQL Builder(Sql 对象)可以防止 SQL 注入。但是 Query(string query,parameters) 方法可以防止 SQL 注入吗?

SQL 生成器是安全的:

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

但是像这样传递参数的字符串查询安全吗?

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

mjw*_*lls 5

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

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

另请参阅https://github.com/CollaboratingPlatypus/PetaPoco/issues/326#issuecomment-238538854

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