.NET参数化查询注入

时间:2010-07-27 15:29:55

标签: .net database parameters

.NET中的参数化查询是否可以安全地从SQL注入?也就是说,当你使用参数时,.NET会自动逃避危险的字符吗?

3 个答案:

答案 0 :(得分:12)

使用参数时,它们通常不会首先作为文本发送。他们可以使用本机线程协议来存储数据库。如果参数本身是文本参数,那么它通常会在协议中封装,以便数据库知道它是一个参数而不是SQL。

虽然我认为提供者可以只是将参数转换为完整的SQL语句,但这将是一种糟糕的做事方式。

所以基本上是“是” - 参数化查询可以有效地防止SQL注入攻击,只要你没有存储过程动态地将参数作为SQL等执行。

答案 1 :(得分:2)

当您使用参数时,.Net的SQL客户端会将参数值发送到原始TDS流中的SQL服务器。

但是,这并不能保护您免受恶意SQL的侵害 如果您的SQL使用包含连接参数的字符串调用EXECUTE,则您仍然容易受到攻击。

答案 2 :(得分:0)

就字符串值而言,是 - .NET会为你逃避它们,你可以通过尝试在像“--comment”这样的表中查找值来查看它,这会破坏连接语句,但是它可以正常工作参数化查询。

正如乔恩所说,数字和日期等内容将以原生格式发送,这样更安全/更快。