V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
claysec
V2EX  ›  程序员

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

  •  
  •   claysec ·
    boku7 · 2019-10-30 17:51:45 +08:00 · 2526 次点击
    这是一个创建于 1853 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    求大神帮忙

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

    "屎好吃"

    "屎不好吃"

    你用大于小于来比较一个试试?
    claysec
        21
    claysec  
    OP
       2019-10-31 09:33:28 +08:00 via iPhone
    @laminux29 那你想要我表达什么呢?
    claysec
        22
    claysec  
    OP
       2019-10-31 09:34:42 +08:00 via iPhone
    @taogen 11 楼是答案。已经弄明白了(滑稽
    a7217107
        23
    a7217107  
       2019-10-31 09:41:31 +08:00
    跟字符串长度无关,比较的是字符串的编码,可能是 Unicode (因为有中文),从首位开始比较,相同则比较下一位,不同则返回对应的 true or false
    silenceeeee
        24
    silenceeeee  
       2019-10-31 09:47:43 +08:00
    google mysql collate
    claysec
        25
    claysec  
    OP
       2019-10-31 13:31:25 +08:00
    @a7217107 比的是 ascii 码。#16 已经很清楚啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1208 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:29 · PVG 02:29 · LAX 10:29 · JFK 13:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.