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

为啥 12306 一个劲防黄牛,防抢票软件,但对外又是开放订票接口的?

  •  
  •   pyse · 2018-04-04 16:47:27 +08:00 · 12454 次点击
    这是一个创建于 2422 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,始终不明白,12306 一个劲防黄牛,防抢票软件,但订票的接口为啥一直对外开放呢,这么多抢票软件,不都是直接封装官网的接口进行刷票吗? 12306 是是睁一只眼闭一只眼呢,还是说这玩意儿压根就防不了,高手在民间? 不是接口还是可以鉴权的吗?

    第 1 条附言  ·  2018-04-04 19:04:08 +08:00
    可能我不太懂前台跟后台的相互调用机制,我个人的理解就是说,前台去调用他 http 协议的后台接口时,为什么没有进行一些安全验证什么的?谁都可以调用这个 http 协议接口, 如此说来,就是不能区分出来,到底是手动在操作,还是脚本在循环运行
    61 条回复    2018-04-06 18:41:57 +08:00
    maemual
        1
    maemual  
       2018-04-04 16:50:49 +08:00
    前端接口? js 写的东西怎么搞都会被人破解啊。
    pyse
        2
    pyse  
    OP
       2018-04-04 16:53:19 +08:00
    @maemual 肯定后台接口啊,,登录,查询 ,提交订单,这不都是后台干的事儿?
    Sharuru
        3
    Sharuru  
       2018-04-04 16:54:42 +08:00
    接口在哪? :doge:
    maemual
        4
    maemual  
       2018-04-04 16:56:19 +08:00
    @pyse 你在说什么。。。这不都是给前端调用的么。
    Muniesa
        5
    Muniesa  
       2018-04-04 16:56:30 +08:00   ❤️ 1
    个人觉得这种东西真的想禁的话发个通知各个软件就得改
    xycool
        6
    xycool  
       2018-04-04 16:57:24 +08:00
    @pyse 难道不是抓包来的吗。。。
    1195726908
        7
    1195726908  
       2018-04-04 16:57:26 +08:00 via iPhone   ❤️ 1
    谁告诉你 12306 开放接口了?都是自己抓取 12306 的各种数据获取请求然后封装一遍,官方怎么可能提供接口了……
    thedog
        8
    thedog  
       2018-04-04 16:58:24 +08:00 via Android
    我一直以为抢票软件和 12306 是有 py 交易的…
    binjoo
        9
    binjoo  
       2018-04-04 16:58:31 +08:00
    @pyse 你还是太年轻了,那些都是通过抓包,然后模拟请求的。
    crab
        10
    crab  
       2018-04-04 17:03:14 +08:00
    @Muniesa 这些天不是有个研究生秒车牌,直接被定性非法入侵互联网。12306 这个真要整,通知都不用了。
    pyse
        11
    pyse  
    OP
       2018-04-04 17:06:18 +08:00
    @maemual 前端调用不是也可以鉴权吗?
    jadec0der
        12
    jadec0der  
       2018-04-04 17:06:55 +08:00
    真没有后台接口,都是模拟浏览器,只不过大厂的技术比较好,插件的技术一般而已
    SourceMan
        13
    SourceMan  
       2018-04-04 17:07:34 +08:00
    "爬虫"了解一下
    SourceMan
        14
    SourceMan  
       2018-04-04 17:07:48 +08:00
    “模拟登录”了解下
    pyse
        15
    pyse  
    OP
       2018-04-04 17:07:55 +08:00
    @1195726908 前端调的最终,还不是后台的接口?
    pyse
        16
    pyse  
    OP
       2018-04-04 17:08:17 +08:00
    @Sharuru 一个 url 请求过去的,那个不是后台的协议接口吗?
    pyse
        17
    pyse  
    OP
       2018-04-04 17:09:55 +08:00
    @jadec0der 我一直觉得前端请求的 http 协议,不就请求到后台去了吗,这本质不就还是调了后台接口?还是说我理解不对?
    fe619742721
        18
    fe619742721  
       2018-04-04 17:11:06 +08:00
    @pyse 你后端不这么整,前端咋调用?这玩意不叫开放接口,
    scarletmu
        19
    scarletmu  
       2018-04-04 17:11:31 +08:00
    @pyse 对啊 12306 的网站用的这些接口啊
    pyse
        20
    pyse  
    OP
       2018-04-04 17:11:34 +08:00
    @fe619742721 那这应该叫啥,网站不都是种形式吗
    b821025551b
        21
    b821025551b  
       2018-04-04 17:11:50 +08:00
    题主的知识是不是只停留在理论上,没做过项目。
    fe619742721
        22
    fe619742721  
       2018-04-04 17:12:24 +08:00
    @pyse 这不叫啥,你说的那些软件叫爬虫和模拟登陆
    pyse
        23
    pyse  
    OP
       2018-04-04 17:12:56 +08:00
    @b821025551b 哈哈,小白一枚啊,一个 http 请求到接口去,这种应该叫什么?跟真正调用后台接口有啥区别
    shower
        24
    shower  
       2018-04-04 17:15:05 +08:00
    你可以讲一下按照你的理解,12306 应该怎么做才算“不开放接口”呢?
    wekw
        25
    wekw  
       2018-04-04 17:15:07 +08:00
    技术限制了你的想象力。


    大厂也是抓网页的。
    scarletmu
        26
    scarletmu  
       2018-04-04 17:15:15 +08:00
    @pyse 你正常使用肯定是你的客户端 /网页来请求这些接口啊,有自己的鉴权规则,你说的这种就是抓包分析这整个流程来实现模拟这样的请求过程,并不是 12306 主动开放的
    chinvo
        27
    chinvo  
       2018-04-04 17:17:52 +08:00   ❤️ 1
    @pyse #23 楼主你魔障了

    这些接口是暴漏给网站前端使用的,所以前面的各位称之为“前端接口”

    与之相对的,“后台接口”指暴漏给 headless 的部分使用的接口,通过 apikey 和 IP 白名单之类的东西限制调用,也就是你想要怒喷的东西

    但是 12306 只是被抓包解析出了“后台接口”,然后抢票软件假装自己是个浏览器去调用的
    Delete
        28
    Delete  
       2018-04-04 17:18:01 +08:00
    开放接口和爬虫不一样的
    开放接口,是给第三方应用调用接口的权限。
    而爬虫,是模拟真实用户操作的。

    就像一个正常用户与网站交互,不通过 HTTP 你以为通过什么??
    你要防爬虫?那真实用户也可能无法正常使用了。
    xiaole
        29
    xiaole  
       2018-04-04 17:19:16 +08:00
    打掉大老虎,下面一群小苍蝇。还不如和大厂搞好关系~
    pyse
        30
    pyse  
    OP
       2018-04-04 17:23:30 +08:00
    @shower 按照我的理解就是,只有在 12306 官网上才能正常登录,查询 ,订票,其他地方一率不行,哈哈
    b821025551b
        31
    b821025551b  
       2018-04-04 17:28:49 +08:00
    这种东西,你可以理解为那些抢票软件把自己伪装成一个浏览器,把用户所有的操作模拟再自动化一下,每次刷票和用户手动刷票基本没区别。鉴权?不存在的。只要能给用户使用,就能被模拟,只是模拟的难度不同罢了。
    ypw
        32
    ypw  
       2018-04-04 17:31:13 +08:00
    浏览器能做的事,程序都能做,没有模拟不了的接口。

    你能在浏览器里面登录,查询,买票,那如果浏览器是我写的呢?我难道不能控制你的行为,让你以每秒 100 次的速度买票吗? 12306 怎么防?
    chinvo
        33
    chinvo  
       2018-04-04 17:32:30 +08:00
    @pyse #30 不可能的

    见 @b821025551b #31

    除非 12306 完全终止对外服务
    pyse
        34
    pyse  
    OP
       2018-04-04 17:33:07 +08:00
    @b821025551b 为什么不能搞成只有在官网才能调用他的协议接口?其他地方调就提示 401 之类的?哈哈,我也不懂,小白
    chinvo
        35
    chinvo  
       2018-04-04 17:35:12 +08:00
    识别非人类使用者(爬虫 /机器人)是一门很深的学问

    全球这么多专门研究这个的公司,也没有一家能 100% 屏蔽非人类使用者的

    你十分反感的那个 12306 登陆界面和购票界面的九宫格图片就是做这个的,但是如你所见,效果十分不理想

    而且抢票软件还可以通过直接展示这个东西给真人用户的方式来让用户去完成验证
    HsingChih
        36
    HsingChih  
       2018-04-04 17:35:27 +08:00 via Android
    12306 的反爬措施一直在更新的
    janus77
        37
    janus77  
       2018-04-04 17:36:27 +08:00   ❤️ 1
    菜农把菜批发给小贩 小贩再卖给消费者。
    有一天菜农们统一口径,只准批发给 A 农贸市场的,其他人不卖。
    然而有人不是 A 市场的,为了搞到菜,假装 A 市场的人去进货。
    典型区别就是:
    1. 菜农本身是不希望开放给 A 市场之外的
    2. 菜农没法鉴别小贩是不是 A 市场的
    3. 只要某个人设法让菜农相信他是 A 市场的,那他就可以拿到菜。
    chinvo
        38
    chinvo  
       2018-04-04 17:37:30 +08:00
    @pyse #34 我认为你没有认真阅读 @b821025551b #31 的解答

    你可以用浏览器访问,脚本就同样可以通过浏览器访问

    人为增加脚本进行操作难度的方法即我在 #35 提出的 识别非人类使用者(全自动区分计算机和人类的公开图灵测试,CAPTCHA )
    shower
        39
    shower  
       2018-04-04 17:53:11 +08:00
    @pyse #30 什么算是“在官网”呢?
    pyse
        40
    pyse  
    OP
       2018-04-04 18:29:46 +08:00
    @chinvo 哦哦,这样啊,学习了 /抱拳
    @janus77 形象生动,学习了
    CloudnuY
        41
    CloudnuY  
       2018-04-04 18:56:23 +08:00
    这些抢票软件就是在模拟人的操作
    icy37785
        42
    icy37785  
       2018-04-04 19:23:11 +08:00   ❤️ 13
    楼主给我的感觉就是发现家里门被撬开了,然后很愤怒,防盗门厂为什么明明做了锁,却还是要跟小偷有 py 交易,让小偷可以打开我家的锁。
    底下的全部在回复,防盗门厂跟小偷没有 py 交易,是小偷自己撬开的。
    楼主很疑惑,防盗门明明应该只有主人可以打开,小偷打开了锁,肯定是 py 交易,没有 py 交易小偷怎么可以打开锁的。
    底下的都在解释原理,小偷是通过技术手段撬开了锁。
    楼主更疑惑了,为什么防盗门厂不把锁做得只有用这钥匙才能开,而要做得用别的东西也能撬开。
    前面的流程都走完了,我感觉下面的话题应该进展到,跟楼主说,防盗门厂家也希望只有钥匙可以打开锁,别的东西撬不开,但是做不到啊。除非不做钥匙孔,甚至不做钥匙孔都有可能用其他方式把门撬开,所以最安全的是焊死。
    12306 也想只有在官网可以登陆,别的地方访问不了接口呀,但是做不到啊,除非不让人访问。甚至不让人访问都有可能用其他的方式访问到接口,所以最保险的是服务器断网。
    pyse
        43
    pyse  
    OP
       2018-04-04 20:04:27 +08:00
    @icy37785 哈哈,我好像钻了牛角了,被你这么一说,我懂了,感谢形象的例子
    iyaozhen
        44
    iyaozhen  
       2018-04-04 20:31:42 +08:00 via Android
    这叫接口,不叫开放接口
    kookpua
        45
    kookpua  
       2018-04-04 21:00:22 +08:00 via iPhone
    @icy37785 大神
    sola97
        46
    sola97  
       2018-04-04 22:44:19 +08:00
    那得把网站停了,然后 App 加壳混淆协议加密,提高模拟难度
    wxlpure
        47
    wxlpure  
       2018-04-04 23:00:04 +08:00
    前台调用后台的接口,当然有验证机制。最简单的例子,登陆后你会获取一个 token,之后你的请求头中就会带上 token,后台接收到请求时就会验证 token 是否是有效的。
    cxbig
        48
    cxbig  
       2018-04-04 23:01:24 +08:00
    不是听说黄牛都是直接包车厢再分销么。。。根本拦不住。
    msg7086
        49
    msg7086  
       2018-04-05 01:30:11 +08:00
    最差的,我开个脚本,让脚本在浏览器里填资料点按钮,你怎么防护?
    zgx030030
        50
    zgx030030  
       2018-04-05 02:36:07 +08:00 via iPhone
    页面上 form 表单的 action 也叫做接口了吗。。。
    xiqingongzi
        51
    xiqingongzi  
       2018-04-05 07:49:12 +08:00 via iPhone
    csrf 了解一下
    karottc
        52
    karottc  
       2018-04-05 08:10:31 +08:00 via Android
    第一次不防,不就挂了嘛
    xiaket
        53
    xiaket  
       2018-04-05 09:05:43 +08:00   ❤️ 3
    菜得让人心疼...
    hlwjia
        54
    hlwjia  
       2018-04-05 09:43:39 +08:00 via iPhone
    我其实觉得楼主还是没懂
    mazyi
        55
    mazyi  
       2018-04-05 09:58:51 +08:00 via iPhone
    心疼楼主 5 秒,然后表示,多看书啊
    CYKun
        56
    CYKun  
       2018-04-05 10:41:34 +08:00 via Android
    菜的让人心疼。。
    snw
        57
    snw  
       2018-04-05 10:54:10 +08:00 via Android
    12306 不是有官方自带刷票、自动购票功能吗?我看到那些抢票网站也就官方那些功能而已,无非帮你挂机。
    DeWhite
        58
    DeWhite  
       2018-04-05 20:58:20 +08:00 via Android
    黄牛都是直接卡票,一键推取。很恶心
    reus
        59
    reus  
       2018-04-05 23:11:21 +08:00 via Android
    懂的太少,想得太多
    Cyron
        60
    Cyron  
       2018-04-06 02:10:11 +08:00 via iPhone
    @icy37785 比喻恰当,防盗门厂商提供接口(锁眼)
    Senorsen
        61
    Senorsen  
       2018-04-06 18:41:57 +08:00 via Android
    不好意思,不过我还是想说,楼主知识太少却想的太多,前后端 /HTTP API 还没搞明白就在想更复杂的问题了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2853 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 15:14 · PVG 23:14 · LAX 07:14 · JFK 10:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.