2023 年,一个被攻陷的广告 SDK——SpinOK——悄悄从 101 款安卓 App 中窃取用户数据,其中不少下载量以百万计,且全部仍躺在 Google Play 上。开发者没做错任何事,只是信任了一个运行时看不见的远端依赖。
博人眼球的是恶意 SDK。更日常、也更安静的那一版,就藏在你自己的 App 里:登录、支付、个人资料等核心链路,被渲染在一个从你自己服务器加载文档的 WebView 中。
你以为你控制着它。App 是你发的包。但当一条链路以远端 HTML 跑在 WebView 里,你其实已经把一部分安全边界,交给了「今晚负责提供那份文档的人」。
WebView 不是你拥有的沙箱
WebView 是嵌在 App 里的浏览器引擎。它加载远端页面时,那页面就表现得像一张网页。为了打通集成,如果你开启了 JavaScript 桥、文件访问或混合内容,那么一旦页面(或它前面的 CDN)被攻陷,攻击者就能从 Web 内容直接横向移动到原生 App 的功能里。
这不是理论。OWASP 移动端 Top 10(2024)把「平台使用不当」列为头号风险,其中 WebView 条目说得很直白:WebView 配置不当会把原生能力暴露给远端内容。在没有严格来源管控的情况下开启 JavaScript,是经典的横向移动入口。你信任的那张页面,变成了能触达用户令牌、通讯录、钱包的页面。
你继承了整个 Web 的供应链
更深层的问题,是远端页面把什么拉了进来。那张 HTML 里每一个统计脚本、每一个 CDN 资源、每一个第三方 SDK,现在都是你的攻击面——而你对其中的任何一个都没管辖权。
正因为如此,OWASP 在 2024 修订版里把「供应链安全不足」新增为移动端第二号风险。数字相当刺眼:
- 91% 的企业在 2024 年遭遇过软件供应链攻击。
- 85% 的移动 App 含有安全或隐私漏洞,多数可追溯到第三方组件。
- 一项 2024 年对 158 个常用安卓 SDK 的学术研究发现 338 起隐私数据外泄实例,且 88% 虚假声称了自己实际使用的敏感权限。
当你的支付页是一张远端网页,你就把这一整笔负债进口了进来。结账流程里一个存在漏洞的脚本,是你的数据泄露,不是供应商的头条新闻。
边界到底在哪里崩掉
| 维度 | 核心链路跑在 WebView | 核心链路跑在宿主自有 runtime |
|---|---|---|
| 内容来源 | 远端服务器,随时可变更 | 来自受控目录的签名包 |
| 权限边界 | 远端页面共享 WebView 能力(JS 桥横向移动风险) | 能力白名单,默认最小权限 |
| 供应链暴露 | 每一个内嵌脚本、CDN、SDK | 经审核的、受控的组件目录 |
| 应用级控制 | 商店审核与证书锁定从未看见那份远端 HTML | 与原生代码同一套签名与安全模型 |
| 事件响应 | 等 CDN 或第三方打补丁 | 分钟级的熔断开关或版本回滚 |
你花重金买的控制,够不到远端页面
这是团队最容易忽略的一点。你投入的应用级安全——证书锁定、代码签名、商店审核、运行时权限收窄——在 WebView 的边缘就停了。那份远端 HTML 不在你的构建产物里,没被你签名,也从没经过商店审核。商店过审是分发关卡,不是安全边界。
于是,一条看起来「在 App 里」的链路,在安全的意义上,跑在了你亲手搭建的每一道控制之外。
而搞砸这件事的代价并不抽象。IBM 2025 年数据泄露成本报告称,单次泄露的全球平均成本为 444 万美元(美国平均创下 1022 万美元 的纪录),几乎每个受害方都经历了运营中断,多数恢复耗时 超过 100 天。一次 WebView XSS 偷走的会话令牌,往往就是那扇前门。
宿主自有 runtime 关上了门
替代方案,是不再向一份远端文档租借你的安全边界。宿主自有 runtime 把小程序当作第一方、沙箱化、已签名、来自受控目录的组件来跑:
- 来源你掌控。 内容是签名包,不是今晚从网络拉取的一张可变页面。
- 能力收窄。 runtime 只授予组件声明过的权限——默认最小权限,没有沉默的 JS 桥后门。
- 供应链受控。 组件来自审核过的目录,而非远端页面临时决定加载的任意脚本。
- 即时响应。 一个坏组件,分钟级熔断或回滚,而不是等第三方打补丁。
你保留了 Web 的发布速度,却没有把威胁模型外包给陌生人。
一句话结论
H5 依赖被包装成便利:发一次、从服务器更新、跳过商店审核。但每当你把一条核心链路渲染成 WebView 里的远端 HTML,你就是用一道受控的边界,换了一道敞开的边界。我们之前写过的「合规黑盒」只是故事的一半;另一半是,攻击面现在已经归「提供文档的那一方」所有——而你要等到令牌被顺走,才知道发生了什么。
一个带开放、可治理目录的通用 runtime,让你既保住速度,又把边界拿回来。