0%

or true 和and true 有什么区别

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 永真 相当于 没 whereandor的优先级要高
where 1=2 and 1=2 or 1=1;
相当于
where 1=1;

这么理解 where id=1 and 1=1 是这两个条件同时存在并且同时为真的时候才能成立 简单一点说 1=1为真 那么就必须要考虑第一个条件 也就是id=1 是否成立 才能得出结果

数据库内部是怎么判断,orand的不同的
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=1Trueor的话,比id=1的判断面要大有点像贪婪模式的感觉就把where后面编程true

最终解决问题

这样你就懂了 问题结束。

知乎一个问题,问遇到强奸,为什么不踢他蛋蛋?

有位带哥说了一句,打蛇打七寸,你敢吗?

这是我见过诠释的最完美的,最简短的

QQ群:397745473

欢迎关注我的其它发布渠道