我一直在使用盲SQL注入技术测试一个搜索框。
当我想获得包含“ A”的帖子时,我只需在搜索框中提交字母A
。但是,要获取所有帖子,我想使WHERE LIKE
子句为真。
因此,我发布了A%'='A
以使值正确。我期望SELECT * FROM list WHERE title LIKE 'A%'='A%';
。但是它显示了所有包含字母“ A”的帖子。同样,当我发布A%'! =' A
时,我得到的结果包括'A'
。
我不知道为什么会这样。
答案 0 :(得分:1)
您的查询显然没有多大意义,但是MySQL会尽最大努力通过使用autocast来满足您的请求。
首先它将评估title LIKE 'A%'
。这将返回一个true / falsy值,对于MySQL是1
或0
(整数)。
接下来,您强迫MySQL将这个整数与'A%'
进行比较。 MySQL将尝试遵守该请求,并将此字符串转换为a 0 for you。
所以LIKE 'A%'='A%'
最终将与
where (title LIKE 'A%') = 0
与
相同where not (title LIKE 'A%')
返回所有不以A
开头的标题。
类似地,LIKE 'A%'!='A%'
将成为
where (title LIKE 'A%') != 0
与
相同where (title LIKE 'A%')
因此您会获得所有 以A
开头的标题。
请不要忘记将该复选框的所有者告知always parametrize your inputs。