.NET中的参数化查询是否可以安全地从SQL注入?也就是说,当你使用参数时,.NET会自动逃避危险的字符吗?
答案 0 :(得分:12)
使用参数时,它们通常不会首先作为文本发送。他们可以使用本机线程协议来存储数据库。如果参数本身是文本参数,那么它通常会在协议中封装,以便数据库知道它是一个参数而不是SQL。
虽然我认为提供者可以只是将参数转换为完整的SQL语句,但这将是一种糟糕的做事方式。
所以基本上是“是” - 参数化查询可以有效地防止SQL注入攻击,只要你没有存储过程动态地将参数作为SQL等执行。
答案 1 :(得分:2)
当您使用参数时,.Net的SQL客户端会将参数值发送到原始TDS流中的SQL服务器。
但是,这并不能保护您免受恶意SQL的侵害
如果您的SQL使用包含连接参数的字符串调用EXECUTE
,则您仍然容易受到攻击。
答案 2 :(得分:0)
就字符串值而言,是 - .NET会为你逃避它们,你可以通过尝试在像“--comment”这样的表中查找值来查看它,这会破坏连接语句,但是它可以正常工作参数化查询。
正如乔恩所说,数字和日期等内容将以原生格式发送,这样更安全/更快。