我建立了使用sql server的网站,并使用这个sql来删除来自querystring的id的项目:
DELETE FROM tablename WHERE GUID = 'param'
是否可以注入将返回db_name()的sql?
我知道我只能为这样的选择语句注入sql
select name from tablename where 'parems'
union all
select db_name()
但是删除语句
呢?我知道我可以将表插入到表中,但是在这个阶段我需要知道我是否可以得到一些数据,例如:db_name()
答案 0 :(得分:5)
不确定。这个参数值:
' OR ''='
将导致此声明:
DELETE FROM tablename WHERE GUID ='' OR '' = ''
将删除表格中的所有数据。
答案 1 :(得分:1)
是的,查询总是返回结果,因此如果数据库驱动程序允许,您只需在删除后添加另一个查询。
像这样的输入:
x'; select db_name() --
会给:
DELETE FROM tablename WHERE GUID = 'x'; select db_name() --'
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为你的问题是否可能使用纯粹的删除声明。如果是这样,可以通过添加OUTPUT clause来实现:
DELETE Sales.ShoppingCartItem
OUTPUT DELETED.*
WHERE ShoppingCartID = 20621;
这将输出删除行。
要避免SQL注入,您应该使用SQL参数