什么是MySQL的字符串比较规则?

时间:2015-03-27 21:37:38

标签: mysql sql sql-injection

为什么SELECT * FROM users WHERE password='a'='mm';实际返回行?

为什么SELECT * FROM users WHERE password='1'='1';不起作用?

使用的完全相等的运算符比较规则是什么?

更新(表格和行等信息):

mysql> show tables;
+------------------+
| Tables_in_shengy |
+------------------+
| users            |
+------------------+
1 row in set (0.00 sec)

mysql> describe users;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| username | varchar(255) | YES  |     | NULL    |       |
| password | varchar(255) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> select * from users;
+----------+----------+
| username | password |
+----------+----------+
| victim   | 123456   |
+----------+----------+
1 row in set (0.00 sec)

1 个答案:

答案 0 :(得分:4)

MySQL将比较转换为01

因此password='a'评估为0(除非password实际上 'a')。

MySQL也试图通过将字符串从头开始转换为数字来对字符串和数字进行比较。

因此0abc会转换为0abc根本不是一个数字,也是0

这意味着

password='a'='mm'

结果

0='mm'

由于mm没有任何前导数字,因此

0=0

这是真的。