为什么“ =”和“ like”在同一条语句中起作用

时间:2019-07-14 18:14:41

标签: sql sqlite

我正在练习SQL注入技能,发现可以将=LIKE放在一个语句中。

但是,我不确定这是什么意思,为什么会起作用?

SELECT 1 FROM users WHERE name='' LIKE '%'

那么,当我将=LIKE放入语句中时,什么时候写这样的东西意味着什么?

2 个答案:

答案 0 :(得分:2)

我猜您正在使用MySQL,因为在语法上这是正确的。它将布尔类型视为数字(将转换为整数和字符串)。

因此,您的代码应解析为:

WHERE (name = '') LIKE '%'

这是因为=LIKE具有相同的优先级,并且当运算符具有相同的优先级时,它们是从左到右求值的(如documentation中所述)。

这又将得出以下三种可能性之一:

WHERE 1 LIKE '%'   -- when name = ''
WHERE 0 LIKE '%'   -- otherwise when name is not null
WHERE NULL like '%'

前两个始终为true。第三个将丢弃namenull的任何行。

答案 1 :(得分:-2)

(在MySQL和其他流行的DBMS中)LIKE运算符用于在列中搜索指定的模式。它接受“%”作为通配符,表示零个,一个或多个字符。

您的查询始终会通过,因为字符串''符合此通配符(零个字符)。顺便说一句,几乎任何事情都会。但是某些DBMS对这种查询的反应会有所不同。