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

为什么 pwa 还是有跨域限制,而 native 应用没有呢?

  •  
  •   gz911122 · 2020-04-03 16:42:11 +08:00 · 2328 次点击
    这是一个创建于 1698 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果是所谓的如果没有跨域限制那么一个网址可以通过向另一个网址发起请求而获取到数据的安全问题的话,

    为什么 native 应用没有这个安全问题?

    这个安全问题是可以被解决的吗? 跨域限制是否有更好的改进方向呢?

    17 条回复    2020-10-26 16:50:08 +08:00
    SunriseFox
        1
    SunriseFox  
       2020-04-03 16:59:22 +08:00
    跨域不是安全问题,而是安全策略
    跨域是浏览器的安全策略,为了防止你在访问 a 网站时被 a 网站的脚本以你的名义去访问 b 网站做些奇怪的事情。
    如果你的应用不访问这个恶意的 a 网站,或者说,从来不访问 a 网站之外的其他网站,就自然没有这个安全问题。
    你的 pwa 有跨域问题,那么它本质上是个有这个安全策略的浏览器,而不是 “有这个安全问题”。
    你的 native 没有,那么就是因为没有人帮你实现这个安全策略,而不是 "没有这个安全问题"。
    whileFalse
        2
    whileFalse  
       2020-04-03 18:28:35 +08:00
    因为你会在浏览器里面登录不同网站的各种账户。如果浏览器没有跨域限制是什么概念?
    相当于你的手机上装了支付宝,并且登陆了账号。然后手机上任何一个 app 都可以静默调起支付宝 app 给人转账,你还不知道。

    以上的情况可能发生吗?不可能。所以你觉得 native 应用有没有跨域限制?有这么个限制,但你不知道而已。
    vevlins
        3
    vevlins  
       2020-04-03 18:37:20 +08:00   ❤️ 2
    因为 pwa 还是使用 cookie 进行身份验证,而 native 应用通过 token 。

    就这么简单。
    gz911122
        4
    gz911122  
    OP
       2020-04-03 18:43:49 +08:00
    @whileFalse 那 native 这个限制为什么不影响我请求别的域名呢?

    至少对开发者更友好啊
    gz911122
        5
    gz911122  
    OP
       2020-04-03 18:44:22 +08:00
    @SunriseFox native 没有这个安全策略,那么有什么弊端吗? 会安全性更低么?
    love
        6
    love  
       2020-04-03 19:14:43 +08:00
    这也要问吗,因为网页很容易被打开,甚至在用户没注意的情况下,而 native 需要让用户安装,有应用商店审核,本身就比较安全。
    WordTian
        7
    WordTian  
       2020-04-03 19:27:14 +08:00 via Android
    pwa 调用的 chrome 的浏览器内核啊,浏览器有同源策略不是正常的吗?
    morethansean
        8
    morethansean  
       2020-04-03 19:30:45 +08:00
    你会在饿了么的 app 里面登录美团吗?
    但 pwa 是跑在浏览器环境里的,并没有做单独隔离。
    SunriseFox
        9
    SunriseFox  
       2020-04-03 20:03:15 +08:00 via Android
    @gz911122 ……不知道该说什么……总之 1 、所有的规矩都是人定的 2 、网页跑在浏览器上,浏览器定了这个规矩 3 、应用程序跑在操作系统上,操作系统没有这个规矩
    whileFalse
        10
    whileFalse  
       2020-04-03 20:15:14 +08:00
    @gz911122 #4 native 限制你扮演别的 [代码库] 里的 [身份] 。也就是一个 native 不能直接使用另一个 native 的登录状态。
    geelaw
        11
    geelaw  
       2020-04-03 20:25:16 +08:00 via iPhone
    问题错误,对于一个一般程序来说不存在浏览器里 origin 的概念,自然不可能有“跨域”甚至“禁止跨域”的说法,程序做的事情是用 TCP 和另一个机器对话。

    对于网页来说,它是浏览器模型下的程序,自然受到浏览器的约束。同源策略是为了保证浏览器模型下的隔离设置的,而浏览器的安全模型是向用户提供安全保证的契约。实践表明同源策略可以防范许多用户不希望遭受的攻击,所以会加入现代浏览器的安全策略。

    另外,从逻辑简单性+归缪的角度思考这个问题:Chrome 也只不过是一个一般程序,如果一般程序必须和一个域名绑定(假设这句话甚至是有意思的),为什么 Chrome 不是只能访问 Google 的网站?
    jugelizi
        12
    jugelizi  
       2020-04-03 20:26:01 +08:00 via iPhone
    好比浏览器就是个大食堂 好多餐厅 每家都要管好自己的餐具 而一个小饭馆就不需要 因为都是他的
    yunye
        13
    yunye  
       2020-04-03 20:40:49 +08:00
    @vevlins 你是认真的吗?
    iX8NEGGn
        14
    iX8NEGGn  
       2020-04-04 13:44:19 +08:00 via iPhone
    @whileFalse 大佬,怎么感觉你理解错了,跨域是浏览器策略,一楼才是正解,而不是 native 应用也有这个限制
    vevlins
        15
    vevlins  
       2020-04-04 14:07:36 +08:00
    @yunye 我的说法有什么问题呢?
    whileFalse
        16
    whileFalse  
       2020-04-04 17:09:16 +08:00
    @iX8NEGGn 那你说浏览器为什么有这个策略?
    zoharSoul
        17
    zoharSoul  
       2020-10-26 16:50:08 +08:00
    @vevlins 突然明白了这个问题的来源.
    就是因为浏览器会默认加上 cookie, 如果不是这个自动机制, 或者是 token 的话, 根本没这个安全问题.

    谢谢解答.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:48 · PVG 19:48 · LAX 03:48 · JFK 06:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.