1

我说的是 Delphi + ADO + MSSQL。好的,我知道带有参数的查询对于 SQL 注入是非常安全的。另一方面,动态查询是相当不安全的。但是经典的 FieldByName 方法呢?我可以安全地为 FieldByName 分配一个 ABSOLUTELY 任何字符串值,而不会冒注入的风险吗?

4

1 回答 1

5

这是安全的。Ado 正在使用更新/插入/删除的参数。

您可以使用 SQLProfile 进行跟踪,例如

exec sp_executesql N'UPDATE "test".."Activity" SET "data"=@P1 WHERE "InvokeTime"=@P2 AND "data"=@P3',N'@P1 float,@P2 datetime,@P3 float',1,'2013-04-24 10:46:22.933',0,48607825089780715

exec sp_executesql N'INSERT INTO "test".."Activity" ("InvokeTime","data") VALUES (@P1,@P2)',N'@P1 datetime,@P2 float','2000-01-01 00:00:00',2

exec sp_executesql N'DELETE FROM "test".."Activity" WHERE "InvokeTime"=@P1 AND "data"=@P2',N'@P1 datetime,@P2 float','2000-01-01 00:00:00',3
于 2013-06-20T09:21:00.987 回答