在Query" SELECT * FROM users WHERE Name =' ' -0 ||' '和密码=' 11' "

时间:2016-01-07 06:25:28

标签: mysql sql

在查询中

SELECT * FROM users WHERE Name=' ' -0||' ' AND Password='11'

在此声明中,表达' -0 ||' 的含义是什么,它显示了表的所有内容?

1 个答案:

答案 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,并返回结果集中的整个用户表。

您可以使用此小提琴来解决查询问题:

SQLFiddle