sql注入那些事

关于为什么 select * from user where ‘a1’ = ‘e1’ = ‘1’; 和 select * from user where ‘1’=’a1’ = ‘e1’;查询出来sql的值不一样

image-20230425230152933

首先这里说一点,sql字符串具有跟php字符串类似的性质,比如说,如果是以非数字开头的

例如: 'qdadada' 'adad' 这些字符串的逻辑值为0

如果是以数字开头的

例如: '1aaaa' '2bbb' 这些字符串的逻辑值为1

'a1' = 'e1' = '1' '1' = 'a1'= 'e1'的区别

  • 执行顺序不同,造成执行结果截然不同。

'a1'= 'e1' = '1'

  1. 首先 'a1' = 'e1'因为是字符串比较,所以返回false
  2. 表达式就变成了 false = '1'
  3. '1'的逻辑值为 1

所以false = '1'返回了false

'1' = 'a1'= 'e1'

  1. 首先 '1' = 'e1'是字符串比较 返回 fasle
  2. 所以表达式变成了 false = 'e1'
  3. 'e1'的逻辑值为0

所以最终为 false = ‘e1’ 返回了true