我们进行验证密码的时候最常用的方法是 “=” 列入
SELECT * FROM admin WHERE name = 'admin' and password = "123456"
假设现在用 < 或者 > 在 password 字段进行判断会出现很奇怪的结果。 https://i.imgur.com/BMugQCK.png
1 不行,大于 2 就可以了。小弟不知道他是怎么判断的。一直没有搞懂。 这是我的数据库 Imgur
求大神帮忙
1
haiyang416 2019-10-30 17:53:53 +08:00
那你为什么要用 < 和 > 来比较字符串呢?
|
2
claysec OP @haiyang416 就好奇心。尝试了一下,结果发现逻辑新世界(ε=ε=ε=┏(゜ロ゜;)┛
|
3
littleylv 2019-10-30 17:58:39 +08:00 1
然而最常用的方法并不是 name = 'admin' and password = "123456"
1、SELECT password FROM admin WHERE name = 'admin' 2、password_verify('123456 表单填的', '数据库取出来的加密过的') |
4
claysec OP 纯属探讨,只想弄明白是怎么判断的,不用于业务,想法是脑子一热想到的。就觉得很奇怪而已
|
6
crazytudou 2019-10-30 18:04:24 +08:00
0.0,sql 本来就是字符串比对大小
|
7
claysec OP @crazytudou 主要这个还牵扯到一个 ctf 的题目,说能跑出数据
|
8
chendy 2019-10-30 18:21:33 +08:00
字符串本来就能比较,能排序啊…
|
10
claysec OP 那如果是字符串和字符串进行比较。那大于小于号是怎么进行对比的呢?
|
11
noctisnkt 2019-10-30 18:33:22 +08:00 1
mysql 的字符串比较是如果长度相等,则比较相同位置的字符。长度不等,转成 ASCII 码比较
|
13
akira 2019-10-30 18:40:20 +08:00
字符串比较 一般编程书都会讲
|
14
jwenjian 2019-10-30 19:40:31 +08:00 via iPhone
Ascii
|
15
augustpluscn 2019-10-30 19:49:14 +08:00
3 楼正解吧。。。。
|
16
kosmosr 2019-10-30 20:04:51 +08:00
|
19
taogen 2019-10-31 00:51:15 +08:00 via Android
@kosmosr 不一定是 ASCII 编码,varchar 和 char 支持中文,我猜应该是 Unicode 编码。
|
20
laminux29 2019-10-31 08:58:29 +08:00
楼主,我给你两个字符串:
"屎好吃" "屎不好吃" 你用大于小于来比较一个试试? |
23
a7217107 2019-10-31 09:41:31 +08:00
跟字符串长度无关,比较的是字符串的编码,可能是 Unicode (因为有中文),从首位开始比较,相同则比较下一位,不同则返回对应的 true or false
|
24
silenceeeee 2019-10-31 09:47:43 +08:00
google mysql collate
|