通过上一篇文章,相信大家都已经了解了App-Bound Domains,在这篇文章里,我们尝试来理解一个问题:为什么Service Worker需要依赖App-Bound Domains?
如果简单来回答,那就是为了安全和权限控制。
一个简单的比喻
App:就像⼀座城市,拥有⾃⼰的管理权。
WKWebView:是城市⾥的⼀块地,你可以在上⾯盖任何建筑(加载任何⽹⻚)。
Service Worker:这不是⼀栋普通的建筑,⽽是⼀座核电站。它拥有巨⼤的能量(可以拦截和控制所有⽹络流量),⼀旦被滥⽤,后果不堪设想。
在 App-Bound Domains 出现之前,Apple 的政策是:“在这座城市⾥( WKWebView ),绝对不允许建造任何核电站(Service Worker),太危险了。”
App-Bound Domains 的出现,相当于 Apple 说:“好吧,我们允许你建核电站,但必须满⾜极其严格的条件:
1. 你必须向市政府( Info.plist )申报⼀块专⻔的、隔离的‘核电特区’(这就是
WKAppBoundDomains )。
2. 进⼊这块特区的⻋辆( WKWebView 实例)必须接受严格的安检,并保证永远不会离开这块特区
(这就是 limitsNavigationsToAppBoundDomains = true )。
只有在这块被严格隔离和监管的“特区”内,Apple 才认为建造“核电站”是安全的。你不能在城市的普通街道上(⼀个可以随意导航的 WKWebView )建造它。
作用原理
Service Worker 的权限⾮常⾼,⽽ App 对 WKWebView 的控制权也⾮常⾼。如果两者简单地结合在⼀起,会产⽣⼀个 “1+1 > 10” 的安全⻛险,我们称之为“双重特权
(Compounded Privilege)”。
如果两者随意结合会发⽣什么?
如果⼀个普通的、可以访问任何⽹站的 WKWebView 能够运⾏ Service Worker,会发⽣什么:
App的特权: 你的 App 可以通过 evaluateJavaScript 向 WKWebView 中加载的任何⽹⻚注⼊任意 JS 代码。
2. Service Worker的特权: Service Worker 可以拦截该⽹⻚所在域名(Origin)的所有⽹络请求。
灾难性的组合:
你的 App 加载了⼀个银⾏⽹站 mybank.com。然后,你的 App 利⽤特权1,向银⾏⻚⾯注⼊⼀段 JS代码。这段 JS 代码⼜利⽤了特权2,注册并控制了⼀个恶意的 Service Worker。这个 Service Worker就可以:
拦截⽤⼾输⼊的账号密码。
篡改⽤⼾看到的转账⾦额。
在后台悄⽆声息地与⿊客服务器通信。
在这种情况下,⽹站 mybank.com 本⾝的安全机制(HTTPS等)形同虚设,因为攻击的发起者是拥有更⾼权限的原⽣ App。这是对整个 Web 安全模型的巨⼤破坏。
App-Bound Domains 如何解决这个问题?
App-Bound Domains 通过建⽴⼀个清晰的“信任边界”和“责任声明”来解决这个⻛险。
1. 责任声明 (Trust Declaration)
当你在 Info.plist 中声明 WKAppBoundDomains 时,你作为 App 开发者,是在向Apple 的操作系统做出⼀个郑重声明:“我声明, mydomain.com 这个⽹站是我的,我完全信任它,并且我会为它在我的 App 中的⾏为负责。”
2. 权限限制与交换 (Privilege Exchange)
Apple 的操作系统收到这个声明后,提供了⼀个“交易”:如果你想让 App 和你的⽹站 mydomain.com 享受“双重特权”(即 App 能控制WebView,WebView 能⽤ Service Worker),那么你必须放弃让这个 WKWebView 访问其他任何⽹站的权利(设limitsNavigationsToAppBoundDomains =true )。
这就创建了⼀个安全的沙盒。在这个沙盒⾥,App 和 Web 被视为⼀个“利益共同体”,它们之间的深度交互是被允许的。但这个沙盒与外部互联⽹是严格隔离的,从⽽防⽌了上述的攻击场景。
3. 安全默认 (Secure by Default)
对于那些没有进⼊“特权模式”的 WKWebView ,Apple 会默认它们将要访问的是不可信的外部⽹站。因此,为了保护⽤⼾,Apple 会剥夺 App 的特权(禁⽌ JS 注⼊等),⾃然也不会授予 Web 内容任何特权(禁⽤ Service Worker)。
总结
⼀个不受限制的 App 对⼀个不受限制的 WKWebView 的控制,再叠加⼀个拥有⽹络控制权的Service Worker,会创造出⼀个权限过⾼的、极易被滥⽤的安全漏洞。
App-Bound Domains 通过强制开发者划定⼀个与外部隔离的“信任区”,来确保这种强⼤的组合能⼒只在开发者⾃⼰可控、可信
的环境内被使⽤,从⽽杜绝了⻛险。
所以,依赖 App-Bound Domains 并不是⼀个随意的技术选择,⽽是 Apple 为在原⽣环境中安全引⼊强⼤ Web 功能所设计的核⼼安全架构。
1
END
1

球分享

球点赞

球在看