or true 和and true 有什么区别
在群里发现有人在讨论 [or true 和and true 有什么区别] 这个问题.比较有意思
记录一下讨论结果
QQ群:397745473
问题记录如下:
last MaIrnon: sql注入里or true 和and true 有什么区别,为什么or true会返回所有表?
举个栗子:
1 2 3
| select * fromadmin where id=1 and 1=1 select * fromadmin where id=1 or 1=1 有什么区别? 为什么回显不同?
|
解答记录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 1 and 1=1是真 1 or 1=1也是真 但为什么or回显内容是全部,而and只是你要查询的
or 永真 相当于 没 where 了 and比or的优先级要高 where 1=2 and 1=2 or 1=1; 相当于 where 1=1;
这么理解 where id=1 and 1=1 是这两个条件同时存在并且同时为真的时候才能成立 简单一点说 1=1为真 那么就必须要考虑第一个条件 也就是id=1 是否成立 才能得出结果
数据库内部是怎么判断,or和and的不同的 where id =1 or 1=1 是这两个条件存在一个就可以成立 因为1=1 永远为真 所以不用考虑id=几的问题了 所以语句就变成了 select * from admin where True 也就是select * from admin 所以返回了所有的内容,简单的说 or不需要考虑前面那个条件 and必须考虑前面的条件
还有个问题,select * from xxx where id=1 and 1=1 如果id 1存在 那么这个语句应该是 select * from xxx where true 那么也应该是永真,为什么不返回全部列呢
select * from xxx where id =1 or 1=1,不是也有id=1嘛 为什么不和and一样限制输出 1=1的True用or的话,比id=1的判断面要大有点像贪婪模式的感觉就把where后面编程true了
|
这样你就懂了 问题结束。
知乎一个问题,问遇到强奸,为什么不踢他蛋蛋?
有位带哥说了一句,打蛇打七寸,你敢吗?
这是我见过诠释的最完美的,最简短的
QQ群:397745473