惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
The Cloudflare Blog
V
Visual Studio Blog
罗磊的独立博客
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
D
Docker
Last Week in AI
Last Week in AI
B
Blog RSS Feed
C
Check Point Blog
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
博客园 - 聂微东
MongoDB | Blog
MongoDB | Blog
雷峰网
雷峰网

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理,
鸿蒙应用安全编码专题系列之Web组件URL加载安全
华为开发者联盟 · 2026-05-22 · via 人人都是产品经理

背景介绍

在鸿蒙应用开发中,Web 组件(WebView)是加载 H5 页面的核心载体。Android、iOS 等平台因 WebView 误用引发的安全漏洞已屡见不鲜,而鸿蒙系统上的应用也面临类似的安全风险,若未做好防护,极易引发数据泄露、恶意攻击等安全问题。

一、鸿蒙 WebView 常见 URL 加载安全问题

  • 任意 URL 跳转漏洞:外部传入 URL 未做白名单校验,可直接跳转至钓鱼、恶意网页,窃取用户信息或执行恶意操作。
  • 越界跳转风险:未拦截页面内重定向、链接跳转,可信页面可被动跳转至不可信地址,突破初始安全管控。
  • 未校验协议引发漏洞:加载javascript:data:协议易注入恶意 JS 代码;加载file://协议可读取本地文件;加载 deeplink、applink 等链接,会唤起恶意应用或成为攻击其他应用的跳板。
  • JavaScriptProxy 安全漏洞:注册敏感 JSBridge后,恶意网页可利用该能力调用应用的敏感功能,造成权限越界。
  • 隐私数据泄露:WebView 缓存、Cookie、密码凭证未及时清理,残留数据易被窃取,导致用户隐私泄露。

上述漏洞的核心防护手段为白名单管控,即仅允许 WebView 加载可信域名地址。但白名单的校验内容、方式、时机若存在缺陷,仍可被轻易绕过。

二、常见白名单校验不安全场景

(一)未校验协议

仅校验 URL 域名是否在白名单内,忽略协议校验,是最典型的绕过场景。攻击者可构造伪装域名的恶意协议 URL,利用域名匹配绕过校验,实际加载恶意地址。该场景下,仅校验域名无法杜绝协议层面的攻击,必须同步校验协议合法性

错误示例代码如下,其中link是要校验的url,域名满足要求时,才允许加载

攻击方式

构造link如下,通过上述方式获取当前url的host是www.vmall.com,满足上面的要求。但是最后会加载后面的 https://www.baidu.com,进而绕过了域名白名单校验。

通过此案例说明,除了域名,还要对url的协议进行安全校验。建议通过白名单机制校验,仅允许https的url加载。如果用黑名单机制,通常也存在各种绕过方式。

正确示例代码如下,同时校验域名和协议

(二)校验不完整

仅在 URL首次加载时校验协议与域名,未拦截页面重定向、内部跳转后的二次 URL。跳转后的地址若脱离可信范围,原有白名单将完全失效,无法实现全流程安全管控。此时需要对跳转后的地址进行拦截并校验。

Web组件提供了onLoadIntercept()接口来拦截,详情可参考:管理页面跳转及浏览记录导航-管理网页加载与浏览记录-ArkWeb(方舟Web)-应用框架 – 华为HarmonyOS开发者

正确的示例代码如下:

通过上述2个地方的校验可以确保Web组件加载每个URL都在控制范围内。但是在实际开发过程中,通常会出现校验不全或者校验遗漏等问题,是否有一个方案可以直接帮我们自动校验呢?

三、鸿蒙 WebView 安全实现方案

针对上述校验漏洞,鸿蒙 Web 组件提供系统级白名单接口,实现全流程 URL 管控。

(一)核心接口:setUrlTrustList

该接口为鸿蒙官方提供的 URL 白名单配置方法,配置后 Web 组件会自动校验所有加载及跳转 URL,校验不通过则拦截并展示告警页面,无需开发者手动拦截所有跳转场景。接口支持 JSON 格式配置,可精准指定协议、域名、端口、路径。

setUrlTrustList接口详情如下,参考:Class (WebviewController)-@ohos.web.webview (Webview)-ArkTS API-ArkWeb(方舟Web)-应用框架 – 华为HarmonyOS开发者

setUrlTrustListsetUrlTrustList(urlTrustList: string): void

设置当前web的url白名单,只有白名单内的url才能允许加载/跳转,否则将拦截并弹出告警页。

系统能力: SystemCapability.Web.Webview.Core

参数:

参数名 类型 必填 说明
urlTrustList string url白名单列表,使用json格式配置,最大支持10MB。

白名单设置接口为覆盖方式,多次调用接口时,以最后一次设置为准。

当本参数为空字符串时,表示取消白名单,放行所有url的访问。

json格式示例:

{

“UrlPermissionList”: [

{

“scheme”: “https”,

“host”: “www.example1.com”,

“port”: 443,

“path”: “pathA/pathB”

},

{

“scheme”: “http”,

“host”: “www.example2.com”,

“port”: 80,

“path”: “test1/test2/test3”

}

]

}

因此,可通过调用 setUrlTrustList 来配置白名单。

示例代码如下:

当跳转的URL不在上述白名单范围内时,会弹窗如下告警页面。

cke_2171.png

但是此API存在一个问题是不会拦截和校验javascript等协议,因此还需要在URL初次加载前进行协议的白名单校验,仅允许https协议。

(二)最终安全实现逻辑

最终的正确的示例代码如下(仅是代码片段,非完整的代码):

  • URL 加载前协议校验:仅放行https协议,拦截javascript:file:等所有非法协议,从源头阻断协议类攻击。
  • 白名单配置:通过setUrlTrustList配置可信域名,且白名单内仅保留https协议,由系统自动校验全量 URL 加载与跳转,弥补手动校验遗漏。

安全建议

基于上述分析,应用在使用Web组件时,为确保加载的URL均是白名单内的URL,有如下几点安全建议:

  •  URL 首次加载场景(Web 组件直接加载、WebViewController 加载),加载前必须校验协议,仅允许 https 协议,拒绝其他所有协议请求。
  • 调用setUrlTrustList配置域名白名单,白名单内严格限定https协议,依托系统能力实现全流程 URL 自动校验与拦截。
  • 禁止依赖黑名单机制防护,其绕过风险远高于白名单,仅通过白名单实现最小权限管控。

其他鸿蒙应用安全编码专题文章请参考:

https://developer.huawei.com/consumer/cn/blog//topic/03207416677214221