求解 Mysql 这样的字段是怎么判断的呢

2019-10-30 17:51:45 +08:00
 claysec

我们进行验证密码的时候最常用的方法是 “=” 列入

SELECT * FROM admin WHERE name = 'admin' and password = "123456"

假设现在用 < 或者 > 在 password 字段进行判断会出现很奇怪的结果。 https://i.imgur.com/BMugQCK.png

1 不行,大于 2 就可以了。小弟不知道他是怎么判断的。一直没有搞懂。 这是我的数据库 Imgur

求大神帮忙

2517 次点击
所在节点    程序员
25 条回复
haiyang416
2019-10-30 17:53:53 +08:00
那你为什么要用 < 和 > 来比较字符串呢?
claysec
2019-10-30 17:56:24 +08:00
@haiyang416 就好奇心。尝试了一下,结果发现逻辑新世界(ε=ε=ε=┏(゜ロ゜;)┛
littleylv
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 表单填的', '数据库取出来的加密过的')
claysec
2019-10-30 17:59:36 +08:00
纯属探讨,只想弄明白是怎么判断的,不用于业务,想法是脑子一热想到的。就觉得很奇怪而已
claysec
2019-10-30 18:00:13 +08:00
@littleylv 假设一下,哈哈哈哈😁
crazytudou
2019-10-30 18:04:24 +08:00
0.0,sql 本来就是字符串比对大小
claysec
2019-10-30 18:06:21 +08:00
@crazytudou 主要这个还牵扯到一个 ctf 的题目,说能跑出数据
chendy
2019-10-30 18:21:33 +08:00
字符串本来就能比较,能排序啊…
claysec
2019-10-30 18:22:33 +08:00
@chendy emmmm。我知道能比较。但是我关心的是怎么比较的
claysec
2019-10-30 18:25:45 +08:00
那如果是字符串和字符串进行比较。那大于小于号是怎么进行对比的呢?
noctisnkt
2019-10-30 18:33:22 +08:00
mysql 的字符串比较是如果长度相等,则比较相同位置的字符。长度不等,转成 ASCII 码比较
claysec
2019-10-30 18:36:43 +08:00
@noctisnkt 感谢我去试试
akira
2019-10-30 18:40:20 +08:00
字符串比较 一般编程书都会讲
jwenjian
2019-10-30 19:40:31 +08:00
Ascii
augustpluscn
2019-10-30 19:49:14 +08:00
3 楼正解吧。。。。
kosmosr
2019-10-30 20:04:51 +08:00
kosmosr
2019-10-30 20:05:08 +08:00
@kosmosr 比的是首位的 ascii 码
claysec
2019-10-30 22:01:50 +08:00
@kosmosr 谢谢大佬
taogen
2019-10-31 00:51:15 +08:00
@kosmosr 不一定是 ASCII 编码,varchar 和 char 支持中文,我猜应该是 Unicode 编码。
laminux29
2019-10-31 08:58:29 +08:00
楼主,我给你两个字符串:

"屎好吃"

"屎不好吃"

你用大于小于来比较一个试试?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/614567

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX