2013-04-15 44 views
-1

以下是否暴露了Sql Injection攻击矢量?如果它确实如何防止它?带参数的Sql注入

@bookId = '1234;' + 'Drop table Books;' 
Select * from Books where bookId = @bookId 

不会这样执行吗? :

Select * from Books where bookId = 1234; Drop table Books; 
+0

当您运行该命令时会发生什么? – JSR

+0

通过不将未过滤的用户输入传递到数据库层。没有有用的方法来回答这个问题,因为你只是把它标记为“sql”。您的用户无法直接向您的数据库服务器提供输入。 “SQL注入”在这个级别上没有任何意义。 – meagar

+0

@meagar是的,我知道我在这里暗示了一点点。但是你得到了点 – phadaphunk

回答

5

不,它不会。这不是参数化的工作原理。参数化不是字符串连接。

此代码将尝试查找ID为1234;Drop table Books;的书。如果bookIdinteger,那么它将在类型转换中失败。

你很安全。

+0

所以编译器不会简单地用它的值替换'@ Parameter'部分? – phadaphunk

+0

@PhaDaPhunk - 这不是编译器在这里工作。它是数据库驱动程序 - 它将会跳过参数并执行其他操作。 – Oded

+0

哦,我非常感谢! – phadaphunk