使用DbCommand.CreateParameter安全吗?

时间:2019-04-06 21:53:05

标签: c# sql-server sql-injection

我想问问我是否在C#中使用此方法(DbCommand.CreateParameter)将参数值传输到存储过程,那么我对SQL注入安全吗?或者我该如何针对SQL注入?

非常感谢您!

1 个答案:

答案 0 :(得分:2)

SQL Server参数对象始终可以防止SQL注入,使用参数值在服务器端禁止动态SQL。这是因为参数化查询作为RPC call over the TDS protocol执行。参数值以本机格式与语句分开传递,服务器未将其解析为SQL。由于未将参数值解析为SQL语言元素,因此无法执行这些值,并且没有SQL注入漏洞。

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