gz911122
V2EX  ›  问与答

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

  •  
  •   gz911122 · Apr 3, 2020 · 3147 views
    This topic created in 2406 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    就这么简单。
    gz911122
    gz911122
    OP
    Apr 3, 2020
    4
    @whileFalse 那 native 这个限制为什么不影响我请求别的域名呢?

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

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

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

    谢谢解答.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2966 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 12:48 · PVG 20:48 · LAX 04:48 · JFK 07:48
    ♥ Do have faith in what you're doing.