
我们进行验证密码的时候最常用的方法是 “=” 列入
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 U7Q5tLAex2FI0o0g 2019-10-30 17:58:39 +08:00 然而最常用的方法并不是 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 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 |