2011-10-29 77 views
0

有人告诉我,如果在C#中使用SqlCommand并且要为该命令添加参数,它会增加安全性,因为它可以防止Sql Injection。我想知道这是否是事实。如果是这样,它如何停止Sql注入,因为我的理解是,当使用参数时,它只是在Sql命令中的某个点处插入一个字符串。所以这个字符串可以是任何东西,使Sql注入成为可能,对吗?SqlCommand参数说明

回答

3

这不是一个简单的替换。该框架将换码发送值(尤其是字符串),[作为RPC调用的一个单独部分],以便不可能将值作为代码执行。

感谢@PanagiotisKanavos的correction(6年后)。

+0

好的,所以框架将删除刻度标记''内的数字或任何东西? –

+0

不,它将包含勾号作为查询的一部分。所以如果你的领域是一个数字,并有这样的事情。 '+ 0 = 0',那么整个事件将是参数,并且查询将会错误,而不是要修改查询的注入意图。错误是你想要的。 –

+2

不,它不会删除任何内容,只会对它进行编码,以便在写入时可以将其存储在数据库中。 SqlParameter还关心匹配列存储的数据类型,并对其进行适当编码,并检查绑定条件,如字符串是否适合存放VARCHAR(n)的列。 –