我正在练习SQL注入技能,发现可以将=
和LIKE
放在一个语句中。
但是,我不确定这是什么意思,为什么会起作用?
SELECT 1 FROM users WHERE name='' LIKE '%'
那么,当我将=
和LIKE
放入语句中时,什么时候写这样的东西意味着什么?
答案 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。第三个将丢弃name
为null
的任何行。
答案 1 :(得分:-2)
(在MySQL和其他流行的DBMS中)LIKE运算符用于在列中搜索指定的模式。它接受“%”作为通配符,表示零个,一个或多个字符。
您的查询始终会通过,因为字符串''符合此通配符(零个字符)。顺便说一句,几乎任何事情都会。但是某些DBMS对这种查询的反应会有所不同。