使用 DbCommand.CreateParameter 安全吗?

Is it safe to use DbCommand.CreateParameter?

我想问你如果我在C#中使用这个方法(DbCommand.CreateParameter)将我的参数值传送到我的存储过程,那么我又安全了SQL-注入?或者我可以做些什么来对抗 SQL-Injection?

非常感谢您!

SQL 服务器参数对象在 SQL 注入中始终是安全的,除非在服务器端使用参数值动态 SQL。这是因为参数化查询作为 RPC call over the TDS protocol 执行。参数值以本机格式与语句分开传递,不会被服务器解析为 SQL。由于参数值未被解析为 SQL 语言元素,因此无法执行这些值,因此不存在 SQL 注入漏洞。

调用存储过程时最好指定命令类型的存储过程作为额外的安全层。这确保只有存储过程名称被指定为单独传递的命令文本和参数。否则,开发人员可能会无意中以不安全的方式构建命令文本字符串(即包含来自不受信任来源的参数标记和文字值,甚至根本不使用参数)。