在查询中
SELECT * FROM users WHERE Name=' ' -0||' ' AND Password='11'
在此声明中,表达' -0 ||' 的含义是什么,它显示了表的所有内容?
答案 0 :(得分:1)
这似乎是一种巧妙的SQL注入攻击,旨在返回users
表中的所有记录。您的原始查询可以重写如下:
SELECT * FROM users WHERE (Name=' ' -0)||(' ' AND Password='11')
由于MySQL中运算符优先级的顺序,一元减号(-
)具有最高优先级,后跟AND
,最后||
,即OR
}。
这会产生副作用,即它会创建WHERE
形式的condition1 || condition2
子句,其中一个条件将始终为真。
服务器端工程师想要的查询可能看起来像这样:
SELECT * FROM users WHERE Name='something' AND Password='11'
通过为用户名插入' -0||'
,它会创建一个WHERE
子句,该子句将为每一行返回true,并返回结果集中的整个用户表。
您可以使用此小提琴来解决查询问题: