以下是否暴露了Sql Injection攻击矢量?如果它确实如何防止它?带参数的Sql注入
@bookId = '1234;' + 'Drop table Books;'
Select * from Books where bookId = @bookId
不会这样执行吗? :
Select * from Books where bookId = 1234; Drop table Books;
以下是否暴露了Sql Injection攻击矢量?如果它确实如何防止它?带参数的Sql注入
@bookId = '1234;' + 'Drop table Books;'
Select * from Books where bookId = @bookId
不会这样执行吗? :
Select * from Books where bookId = 1234; Drop table Books;
不,它不会。这不是参数化的工作原理。参数化不是字符串连接。
此代码将尝试查找ID为1234;Drop table Books;
的书。如果bookId
是integer
,那么它将在类型转换中失败。
你很安全。
所以编译器不会简单地用它的值替换'@ Parameter'部分? – phadaphunk
@PhaDaPhunk - 这不是编译器在这里工作。它是数据库驱动程序 - 它将会跳过参数并执行其他操作。 – Oded
哦,我非常感谢! – phadaphunk
当您运行该命令时会发生什么? – JSR
通过不将未过滤的用户输入传递到数据库层。没有有用的方法来回答这个问题,因为你只是把它标记为“sql”。您的用户无法直接向您的数据库服务器提供输入。 “SQL注入”在这个级别上没有任何意义。 – meagar
@meagar是的,我知道我在这里暗示了一点点。但是你得到了点 – phadaphunk