尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【OpenHarmony/HarmonyOs 】安全打开网页:Axios HTTPS 拦截、URL 检测与 ArkWeb 容器
【OpenHarmony/HarmonyOs 】安全打开网页Axios HTTPS 拦截、URL 检测与 ArkWeb 容器前言导航类应用最重要的边界是外部链接。一个 URL 从用户输入到显示网页至少要经过协议规范化、网络策略、安全判断、路由传参和 WebView 加载。任何入口绕过其中一步都可能形成风险。本文给出 LinkOS 链界当前实现并说明生产环境还需要补齐什么。一、第一层网络请求统一强制 HTTPS项目基于ohos/axios创建共享实例并设置 8 秒超时privatestaticreadonlyTIMEOUT 8000; HttpUtil.instance axios.create({ timeout: HttpUtil.TIMEOUT, headers: {Content-Type:application/json} });请求拦截器阻止非 HTTPS 地址HttpUtil.instance.interceptors.request.use((config: InternalAxiosRequestConfig){if(config.url !config.url.startsWith(https://)) { console.error([HttpUtil] Non-HTTPS blocked:, config.url);returnPromise.reject(newError(Only HTTPS requests are allowed)); }returnconfig; } );统一实例的优势在于搜索建议、天气、云函数等请求都会自动遵守相同策略。以后增加 Token、Trace ID、统一错误映射也只需改一处。二、第二层区分超时与断网HttpUtil.instance.interceptors.response.use( response response,(error: AxiosError){if(error.code ECONNABORTED) { console.error([HttpUtil] Request timeout); }elseif(error.message?.includes(Network Error)) { console.error([HttpUtil] Network error); }returnPromise.reject(error); } );网络错误不应全部显示“请求失败”。超时、无网络、证书错误、401 与服务器 500 对用户和排查者的意义不同。建议进一步定义领域错误例如TIMEOUT、OFFLINE、AUTH_EXPIRED页面只负责将错误映射为合适提示。三、第三层打开前执行 URL 安全检测privateasyncopenUrl(url:string):Promisevoid {constsafe awaitSecurityUtil.checkUrlSafety(url);if(!safe) { AlertDialog.show({title:风险提示,message:该网站 (${url}) 可能包含恶意内容已拦截。,confirm: {value:知道了,action: () {} } });return; } router.pushUrl({url:pages/v2/WebViewPage,params: {url} }); }项目中的SecurityUtil目前是模拟实现要求 URL 以 HTTPS 开头、提取 hostname并对本地黑名单检查。它适合演示调用链但不能等同于真实安全能力。生产环境至少要防范钓鱼与恶意域名Unicode 相似字符域名重定向后跳到 HTTP 或危险 Schemejavascript:、file:等不期望协议证书异常与中间人攻击URL 中携带的敏感 Token 被记录到日志。四、域名匹配不能使用简单 includes示例中黑名单使用hostname.includes(domain)。这会让notmalicious.com也可能命中malicious.com。更严谨的域名边界判断是functionmatchesDomain(host:string,domain:string): boolean { return hostdomain||host.endsWith(.${domain}); }此外正则提取 hostname 适合受控输入面对完整 URL 标准时应优先使用平台提供的 URI/URL 解析能力避免自行解析遗漏边界。五、ArkWeb 页面接收路由参数EntryComponentstructWebViewPage{controller: webview.WebviewControllernewwebview.WebviewController();Stateurl:string;Statetitle:string加载中...;Stateprogress:number0;aboutToAppear() {constparams router.getParams()asRecordstring,string;if(params params[url]) {this.url params[url]; } } }WebviewController用于后续控制前进、后退、刷新等行为路由参数只负责传递目标地址。页面进入时仍建议再次验证参数实现“纵深防御”不要完全相信上一个页面。六、标题和进度构成基础浏览体验Web({ src:this.url, controller:this.controller }) .width(100%) .layoutWeight(1) .onTitleReceive(event {if(event)this.title event.title; }) .onProgressChange(event {if(event)this.progress event.newProgress; });加载进度小于 100 时展示 Progress收到网页标题后更新顶部栏。即使只是一个最小 Web 容器这两个反馈也能显著降低用户对“页面卡住”的误判。完整浏览器容器还应实现WebView 内部返回历史历史为空再退出页面加载失败页与重试按钮顶部域名显示和证书风险提示下载、文件选择、权限请求策略新窗口与外部 Scheme 拦截页面销毁时资源释放JavaScript Bridge 最小权限和来源校验。七、不要把 API Key 放进客户端项目计划接入 AI 服务这里必须强调HAP 最终运行在用户设备上任何硬编码 Key 都能被提取。正确链路应是HarmonyOS 客户端 ↓ 用户身份令牌 HTTPS AGC CloudFunction↓服务端保管密钥、限流、审计 第三方 AI API客户端只接触自己的短期身份凭证不接触供应商密钥。云函数还应校验用户、限制请求频率并过滤日志中的敏感字段。八、总结网页安全不是一个startsWith(https://)就能完成而是多层防线输入规范化、统一请求拦截、域名安全服务、重定向检查、WebView 导航拦截与服务端密钥隔离。当前项目已经搭出完整链路骨架下一阶段应把模拟检测替换为真实安全服务并补齐 WebView 内部导航策略。️
RELATED

相关推荐

Java+Vue+SpringBoot员工绩效系统:毕业设计全栈实战与部署指南

Java+Vue+SpringBoot员工绩效系统:毕业设计全栈实战与部署指南

这次我们来看一个面向毕业设计的员工绩效考核管理系统。这是一个基于Java、Vue、Spring Boot和MySQL的完整开源项目,包含了源码、数据库、配套文档和答辩教程,旨在为计算机相关专业的毕业生提供一个可直接使用、二次开发或学习参考的实战案例。对于正在寻…

📅 2026/9/9 17:07:51
【OpenHarmony/HarmonyOs 】元服务聚合入口实战:使用 Want 拉起 Ability 与 URI

【OpenHarmony/HarmonyOs 】元服务聚合入口实战:使用 Want 拉起 Ability 与 URI

【OpenHarmony/HarmonyOs 】元服务聚合入口实战:使用 Want 拉起 Ability 与 URI 前言 HarmonyOS 应用不仅能打开网页,还可以通过 Want 描述一次跨组件或跨应用请求。对于“数字生活入口”类应用,元服务聚合页可以统一展示服务名称、分类、支持…

📅 2026/8/23 17:05:44
宠物医院的业务到底有多复杂?这个 Spring Boot 毕设把预约、档案和后台管理串成了一条线【项目编号:project75036】

宠物医院的业务到底有多复杂?这个 Spring Boot 毕设把预约、档案和后台管理串成了一条线【项目编号:project75036】

宠物医院的业务到底有多复杂?这个 Spring Boot 毕设把预约、档案和后台管理串成了一条线Spring Boot 毕业设计项目展示宠物医院看起来只是“给宠物看病”,真正放进一个信息系统里,却会发现它涉及用户、宠物、医生、预约、诊疗信息、内容展示和…

📅 2026/9/10 3:04:18
MORE NEWS

更多资讯

📰

torch2trt源码级评估:PyTorch直转TensorRT的选型指南

最近在帮团队评估 PyTorch 模型的 GPU 推理加速路线,NVIDIA 的 torch2trt 自然进了候选名单。这个仓库挂着 NVIDIA 的名头,star 数也不少,但能不能直接进生产环境,光看 README 和 benchmark 是不够的。我把源码从头到尾过了一遍&a…

📰

PyPTO-Gym 模型转换矩阵解读:pypto-convert-model 的三格式 Round-Trip 校验与冻结测试证据

PyPTO-Gym 模型转换矩阵解读:pypto-convert-model 的三格式 Round-Trip 校验与冻结测试证据 【免费下载链接】pypto-gym PyPTO-Gym 是基于 PyPTO 编程框架构建的算子与模型样例仓库 项目地址: https://gitcode.com/cann/pypto-gym 本文以 PyPTO-Gym 仓库中 p…

📰

Front-End-Checklist 中的关键请求链(Critical Request Chains)治理:从规则定义到源码级验证

Front-End-Checklist 中的关键请求链(Critical Request Chains)治理:从规则定义到源码级验证 【免费下载链接】Front-End-Checklist 🗂 The essential checklist for modern web development, for humans and AI agents 项目地址…

📰

Aspire 项目模板完全指南:模板包结构、版本更新、本地化与测试

Aspire 项目模板完全指南:模板包结构、版本更新、本地化与测试 【免费下载链接】aspire Aspire is the tool for code-first, extensible, observable dev and deploy. 项目地址: https://gitcode.com/GitHub_Trending/as/aspire Aspire(.NET Asp…

📰

Next.js App Router 状态共享实战:在 share-state 示例中掌握 Layout 与页面间的 Context 共享

Next.js App Router 状态共享实战:在 share-state 示例中掌握 Layout 与页面间的 Context 共享 【免费下载链接】examples Enjoy our curated collection of examples and solutions. Use these patterns to build your own robust and scalable applications. 项…

📰

ant-design Upload 组件入门:从「点击上传」Demo 到源码级解析

ant-design Upload 组件入门:从「点击上传」Demo 到源码级解析 【免费下载链接】ant-design An enterprise-class UI design language and React UI library 项目地址: https://gitcode.com/gh_mirrors/antde/ant-design 上传是 Web 表单类交互中最常见的需求…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬