我想问问我是否在C#中使用此方法(DbCommand.CreateParameter)将参数值传输到存储过程,那么我对SQL注入安全吗?或者我该如何针对SQL注入?
非常感谢您!
答案 0 :(得分:2)
SQL Server参数对象始终可以防止SQL注入,使用参数值在服务器端禁止动态SQL。这是因为参数化查询作为RPC call over the TDS protocol执行。参数值以本机格式与语句分开传递,服务器未将其解析为SQL。由于未将参数值解析为SQL语言元素,因此无法执行这些值,并且没有SQL注入漏洞。
最好在调用存储过程时将命令类型的存储过程指定为附加安全层。这样可以确保仅将存储过程名称指定为单独传递的命令文本和参数。否则,开发人员可能会以不安全的方式无意间构建命令文本字符串(即,包含来自不可信来源的参数标记和文字值,甚至根本不使用参数)。