V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
1oNflow
V2EX  ›  问与答

JetBrains 官网点击安装插件, idea 自动弹出安装窗口,这是怎么做到的?

  •  
  •   1oNflow · 2020-05-09 11:23:46 +08:00 · 3849 次点击
    这是一个创建于 1663 天前的主题,其中的信息可能已经有所发展或是发生改变。

    并没有在官网登陆我的账号,也不是 Chrome 提示想要打开 idea 那种调用,这是怎么知道我本机安装的什么版本,并能通知 ide 进行安装?

    30 条回复    2020-05-09 23:12:00 +08:00
    wysnylc
        1
    wysnylc  
       2020-05-09 11:29:38 +08:00   ❤️ 5
    没用过 QQ 的 web 加群还是没用过 tg 的加群?
    t298
        2
    t298  
       2020-05-09 11:32:02 +08:00
    @wysnylc 没明白,
    RubyJack
        3
    RubyJack  
       2020-05-09 11:33:38 +08:00
    url protocol
    Ultraman
        4
    Ultraman  
       2020-05-09 11:34:19 +08:00 via Android
    用 telegram 吗?
    用的话点一下这里 https://t.me/nCoV2019
    Ziya
        5
    Ziya  
       2020-05-09 11:34:49 +08:00
    直接搜索:URL Schemes
    了解更多
    wysnylc
        6
    wysnylc  
       2020-05-09 11:42:39 +08:00
    @t298 #2 他的问题和 QQ 通过 web 加群还有 tg 加群是一样的,注册表注册然后通过 url 拉起本地注册的客户端进行交互
    t298
        7
    t298  
       2020-05-09 11:46:08 +08:00   ❤️ 1
    @wysnylc 啊哦,谢谢
    also24
        8
    also24  
       2020-05-09 11:53:32 +08:00   ❤️ 23
    @wysnylc #1
    @RubyJack #3
    @Ultraman #4
    @Ziya #5

    你们应该仔细看一下楼主的帖子内容的,楼主已经专门讲了 『也不是 Chrome 提示想要打开 idea 那种调用』,说明并不是 URL Schemes 方式。


    我去 https://plugins.jetbrains.com/ 看了下,实际上那个页面是通过请求本地的 WebServer 传递的消息。
    也就是 IDE 其实一直开着一个 WebServer 来接收外部指令,前端页面只是在请求这个接口而已。


    这是具体的请求:
    https://i.loli.net/2020/05/09/LbKEMOmHpXRlFPD.png


    可以在源码中看到一些请求相关的内容:
    https://i.loli.net/2020/05/09/o5q3aZnjudJIiVk.png
    wysnylc
        9
    wysnylc  
       2020-05-09 12:02:33 +08:00
    @also24 #8 这种方式有弊端,ide 不开就失效
    miao1007
        10
    miao1007  
       2020-05-09 12:08:37 +08:00 via iPhone
    这种方案 相当于后门了
    1oNflow
        11
    1oNflow  
    OP
       2020-05-09 12:08:57 +08:00
    @also24 感谢分析,这种方法用户体验的确好,就是担心一直开着 server,更加占用资源了,哈哈
    iFlicker
        12
    iFlicker  
       2020-05-09 12:09:52 +08:00
    @also24 Jetbrains 家的 IDE 一直都开有一个 webServer 以前发现了还没注意是干啥的 这回知道了哈哈哈哈
    also24
        13
    also24  
       2020-05-09 12:18:05 +08:00   ❤️ 1
    @wysnylc #9
    这个页面在刚打开的时候就以空内容请求了这个接口,这个接口会返回当前的 IDE 名称和版本。
    如果请求这个接口失败,这个页面后续是不会用这种方式来安装插件的。


    @miao1007 #10
    IDE 那边应该有校验,我直接 get 这个接口的话会提示是否信任。
    以及,IDE 那边并不是静默下载,而是弹出安装提示框而已。
    https://i.loli.net/2020/05/09/cwpJUI1Rl7SiuaX.png


    @1oNflow #11
    资源问题还真没太注意,猜测应该不会占用太多,毕竟没有太多复杂的东西在里面。


    @iFlicker #12
    之前用 Toolbox 的时候就注意到了,它的登录回调也是这样实现的。
    Jirajine
        14
    Jirajine  
       2020-05-09 12:22:01 +08:00 via Android
    这完完全全就是开后门,网页可以通过这种方式逃逸出浏览器沙盒执行代码,要是被那些 xx 联盟 sdk 学去了那还了得。
    charlieputon
        15
    charlieputon  
       2020-05-09 12:24:55 +08:00 via Android
    这个和安卓开发通过 url scheme 调起 activity 好像啊
    jin7
        16
    jin7  
       2020-05-09 12:53:58 +08:00
    又学了一招...
    sheeta
        17
    sheeta  
       2020-05-09 13:00:40 +08:00   ❤️ 1
    哈哈,腾讯的 qq 登录也是这么干的,不然它怎么知道你电脑上登录了 qq
    sheeta
        18
    sheeta  
       2020-05-09 13:01:04 +08:00
    kaedea
        19
    kaedea  
       2020-05-09 13:15:44 +08:00 via Android
    uri scheme
    lshero
        20
    lshero  
       2020-05-09 13:27:58 +08:00
    @Jirajine 早就学会了 /t/233263
    gamexg
        21
    gamexg  
       2020-05-09 13:31:11 +08:00 via Android
    @wysnylc 我装了 jb 家不少 ide,网页安装插件时,只有运行中的 ide 显示,未运行的就没有显示。
    Xusually
        22
    Xusually  
       2020-05-09 13:37:17 +08:00   ❤️ 2
    浏览器页面和本地 web server 交互,说难听点就是妥妥的后门。之前很多软件都爆了这种漏洞,比如百度的,Zoom 的。
    zoom 的我贴一个链接: https://www.infoq.cn/article/zTyeHcfM*6jMjBCYNK4J
    hahiru
        23
    hahiru  
       2020-05-09 14:19:43 +08:00
    >localhost 服务器存在的唯一原因是 Apple 的 Safari 不支持 URI 处理程序。
    所以这都是苹果的错!
    huage2580
        24
    huage2580  
       2020-05-09 14:35:31 +08:00   ❤️ 1
    其实 啊,网页开 webServer 交互通讯,是很常见的歪路子。在安卓这边,微信内置会封杀 url scheme 。某某音乐就是用这种方式拉起播放器的。当时看到的时候,真滴太 6 了
    szzhiyang
        25
    szzhiyang  
       2020-05-09 16:07:07 +08:00
    @also24 咦,那浏览器中的网页是怎么知道 IDE 监听的是哪个端口呢?端口号是它们事先约定好的还是 IDE 当场告诉它的?
    Jirajine
        26
    Jirajine  
       2020-05-09 16:11:07 +08:00 via Android
    @lshero 那就很糟糕了,据我所知除了 MS 的 uwp 以外没有阻止和 localhost 通讯 /绑定高位端口的机制,防火墙完全管不到。看起来这些端口都是 hardcode 的,可以考虑写一个程序把这些端口都占据并在收到请求时提示用户。
    also24
        27
    also24  
       2020-05-09 16:19:10 +08:00   ❤️ 1
    @szzhiyang #25
    其实我 8 楼贴的那段代码里已经可以看到是直接硬编码了 63342 这个端口
    szzhiyang
        28
    szzhiyang  
       2020-05-09 16:28:04 +08:00
    @also24 好的,感谢。
    gamexg
        29
    gamexg  
       2020-05-09 16:35:49 +08:00 via Android
    @szzhiyang 实现过类似的,硬编码几个端口,一个不行就换下一个。
    zhengjian
        30
    zhengjian  
       2020-05-09 23:12:00 +08:00 via iPhone
    QQ 的自动登录也是这样的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:52 · PVG 04:52 · LAX 12:52 · JFK 15:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.