《白帽子讲 Web 安全》之移动 Web 安全
目录
摘要
一、WebView 简介
二、WebView 对外暴露
WebView 对外暴露的接口风险
三、通用型 XSS - Universal XSS 介绍
四、WebView 跨域访问
五、与本地代码交互 js
5.1接口暴露风险:
5.2漏洞利用:
5.3JavaScript 与 Native 代码通信
六、Chrome 开发者工具可信根证书
七:纵深防御体系构建
7.1. WebView基础加固
7.2. 跨域访问控制矩阵
7.3. 安全交互协议设计
7.4. 证书安全增强
总结
摘要
在移动互联网飞速发展的当下,移动 Web 安全的重要性愈发凸显。《白帽子讲 Web 安全》对移动 Web 安全进行了详细阐述,为我们揭开了这一领域的神秘面纱。
一、WebView 简介
WebView 是移动端(如 Android、iOS)用于嵌入网页的核心,显示网页内容的组件允许开发者在原生应用中嵌入网页,实现混合应用开发,,允许应用内直接加载 Web 内容。其本质是一个轻量级浏览器,但默认安全配置较弱,容易成为攻击入口。
在 Android 系统中,WebView 基于 Chromium 内核,能加载并渲染 HTML、CSS 和 JavaScript 代码。
例如,许多新闻类应用通过 WebView 加载网页形式的新闻详情,电商应用利用 WebView 展示商品介绍页面等。它为开发者提供了便捷的方式,将 Web 技术与原生应用相结合,丰富应用功能和用户体验。
二、WebView 对外暴露
WebView 对外暴露的接口风险
WebView 对外暴露存在诸多安全隐患。由于 WebView 可以执行 JavaScript 代码,若应用对 WebView 的使用缺乏严格管控,恶意代码可能会利用 WebView 的漏洞进行攻击。
JavaScript 接口暴露:开发者可能通过
addJavascriptInterface
方法将本地 Java 对象暴露给 WebView 中的 JavaScript 代码。若未严格过滤输入,攻击者可利用反射机制调用敏感系统 API(如发送短信、读取文件)。
案例:
1.某应用通过 WebView 调用 getUserInfo()
接口时,未校验调用来源,导致恶意网页可窃取用户数据。
2.攻击者可能通过构造恶意网页,在 WebView 加载该网页时,利用 JavaScript 代码获取应用内的敏感信息,如用户登录凭证、个人资料等。此外,若 WebView 被配置为允许执行任意来源的 JavaScript,攻击者还可能通过注入恶意脚本,控制 WebView 的行为,进而对整个应用造成损害。
三、通用型 XSS - Universal XSS 介绍
通用型 XSS(UXSS)是一种严重的安全漏洞。它不同于传统的 XSS(跨站脚本攻击),不受限于特定的网站或应用,而是能够在广泛的环境中利用 WebView 的漏洞进行攻击。
2022 年,Android 的 WebView 爆出 UXSS 漏洞,这一漏洞影响范围广泛。攻击者利用该漏洞,可通过精心构造的恶意网页,在用户使用搭载存在漏洞 WebView 的 Android 设备访问时,执行任意 JavaScript 代码。这意味着攻击者能够突破应用的安全边界,获取设备信息、篡改应用数据,甚至可能控制设备,对用户隐私和设备安全构成极大威胁。
防御措施
- 及时更新 WebView 内核:使用最新 Chromium 内核的 WebView 版本,修复已知漏洞。
- 禁用危险 API:如限制
eval()
函数、避免动态执行未签名脚本。
四、WebView 跨域访问
关键配置方法 | 默认值 | 作用与风险场景 |
---|---|---|
setAllowFileAccess | true | 控制是否允许通过 file:// 协议加载本地文件。默认开启,可能泄露应用私有文件。,允许file协议访问本地文件 |
setAllowFileAccessFromFileURLs | false | 控制 file:// 域页面能否访问其他 file:// 域内容。建议关闭以减少横向渗透风险。,file域页面访问其他file资源 |
setAllowUniversalAccessFromFileURLs | false | 控制 file:// 域页面能否访问任意 HTTP/HTTPS 内容。必须关闭以防止跨协议攻击。,file域访问任意http/https资源 |
- setAllowFileAccess:此属性用于设置 WebView 是否允许访问本地文件。若设置为 true,WebView 可以访问设备本地存储中的文件。然而,这也带来了安全风险,恶意网页可能借此读取用户设备上的敏感文件,如存储在本地的数据库文件、配置文件等。例如,攻击者构造的恶意网页,在 WebView 允许访问本地文件的情况下,可能尝试读取用户的登录密码存储文件(若存在此类不安全存储方式),从而获取用户密码。
- setAllowFileAccessFromFileURLs:该属性控制 WebView 是否允许从文件 URL 中访问其他文件。当设置为 true 时,从本地文件 URL 加载的页面可以访问其他本地文件。同样,这可能被攻击者利用,通过在本地文件中嵌入恶意代码,进而访问更多本地文件,扩大攻击范围。
- setAllowUniversalAccessFromFileURLs:此属性决定是否允许从文件 URL 中进行跨域访问。若设置为 true,从本地文件 URL 加载的页面不仅可以访问本地其他文件,还可能突破限制访问外部网络资源。这无疑为攻击者提供了更多机会,他们可以通过本地文件漏洞,进一步与外部恶意服务器进行交互,获取更多敏感信息或下载恶意软件到设备上。
五、与本地代码交互 js
WebView 允许 JavaScript 与本地代码进行交互,这为应用开发带来了便利,但也存在安全风险。通过 JavaScript 接口,WebView 可以调用原生应用的功能,如访问摄像头、获取地理位置等。然而,如果接口设计不当或缺乏有效的安全验证,攻击者可能通过 JavaScript 代码调用这些接口,获取用户的隐私信息。
例如:恶意网页中的 JavaScript 代码可能在用户不知情的情况下,调用摄像头拍摄照片或获取地理位置信息,并发送给攻击者。开发者在实现 JavaScript 与本地代码交互时,必须严格验证调用来源,确保接口只能被信任的代码调用。
5.1接口暴露风险:
通过addJavascriptInterface
绑定Java对象
// 危险示例:暴露系统级API
webView.addJavascriptInterface(new SystemAPI(), "nativeObj");
5.2漏洞利用:
反射调用敏感方法
// JS调用执行系统命令
nativeObj.getClass().forName("java.lang.Runtime").getMethod("exec", String.class).invoke("rm -rf /");
5.3JavaScript 与 Native 代码通信
风险场景:通过 WebView 调用摄像头、定位等硬件功能时,若未对参数进行类型和范围校验,可能引发越权操作。
防御方案:
- 白名单校验:仅允许特定域名或协议调用 Native 接口。
- 输入过滤:对 JavaScript 传递的参数进行类型强制转换和内容过滤(如正则表达式匹配)。
六、Chrome 开发者工具可信根证书
Chrome 开发者工具可信根证书
- 作用:开发者工具(如 Chrome DevTools)允许用户导入自定义根证书,用于调试 HTTPS 流量。但若设备被植入恶意根证书,攻击者可解密 HTTPS 通信,实施中间人攻击。
- 风险案例:恶意应用在用户设备安装伪造根证书,劫持银行应用的 HTTPS 请求。
解析:
Chrome 开发者工具在移动 Web 开发和调试中被广泛使用。在使用 Chrome 开发者工具调试移动设备上的 WebView 时,需要安装可信根证书。这是因为 WebView 在加载网页时,会验证网页的 SSL 证书以确保通信安全。当使用 Chrome 开发者工具进行调试时,工具会充当中间人,对 WebView 与服务器之间的通信进行拦截和分析。为了让 WebView 信任 Chrome 开发者工具的中间人角色,需要安装其提供的可信根证书。然而,这也带来了安全风险,如果恶意软件获取了该可信根证书,就可能伪装成合法的中间人,拦截和篡改 WebView 与服务器之间的通信,窃取用户数据或进行其他恶意操作。因此,在安装和使用 Chrome 开发者工具可信根证书时,必须谨慎操作,确保证书的安全性。
防御建议
- 证书锁定(Certificate Pinning):在应用中预置合法证书公钥,仅接受指定证书的通信。
- 用户教育:提示用户不要随意安装未知来源的
七:纵深防御体系构建
7.1. WebView基础加固
// 安全配置模板
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(false); // 非必要不开启JS
settings.setAllowFileAccess(false);
settings.setAllowContentAccess(false);
settings.setAllowUniversalAccessFromFileURLs(false);
7.2. 跨域访问控制矩阵
业务场景 | 推荐配置 |
---|---|
纯在线应用 | 关闭所有file协议访问 |
本地文件渲染 | 开启setAllowFileAccess,禁用其他跨域权限 |
混合内容加载 | 严格白名单控制(setAllowedOriginRules) |
7.3. 安全交互协议设计
-
接口暴露原则:
-
使用
@JavascriptInterface
注解限定可调用方法 -
双向参数校验(示例):
-
@JavascriptInterface public void safeMethod(String param) {if(!Pattern.matches("[a-z]+", param)) {throw new SecurityException("非法参数");}// 安全逻辑 }
-
7.4. 证书安全增强
-
证书锁定(Certificate Pinning):
#kotlin val certPinner = CertificatePinner.Builder().add("example.com", "sha256/AAAAAAAA...").build() val client = OkHttpClient.Builder().certificatePinner(certPinner).build()
-
防中间人攻击:
-
禁用开发者工具调试(生产环境)
-
强制使用CertificateTransparency验证
-
总结
移动 Web 安全涉及多个方面,WebView 作为移动应用与 Web 内容交互的关键组件,其安全性至关重要。开发者在使用 WebView 时,必须充分了解其特性和潜在风险,采取有效的安全措施,如严格控制 WebView 的对外暴露、合理配置跨域访问权限、加强 JavaScript 与本地代码交互的安全验证以及妥善管理 Chrome 开发者工具可信根证书等,以保障移动应用的安全和用户的隐私。
喜欢的点点赞和关注,共同进步
相关文章:

《白帽子讲 Web 安全》之移动 Web 安全
目录 摘要 一、WebView 简介 二、WebView 对外暴露 WebView 对外暴露的接口风险 三、通用型 XSS - Universal XSS 介绍 四、WebView 跨域访问 五、与本地代码交互 js 5.1接口暴露风险: 5.2漏洞利用: 5.3JavaScript 与 Native 代码通信 六、Chr…...

CSS_复合选择器
目录 7. 复合选择器 7.1 交集选择器 7.2 并集选择器 7.3 后代选择器 7.4 子代选择器 7.5 兄弟选择器 7.6 属性选择器 7.7 伪类选择器 7.7.1动态伪类 7.7.2结构伪类 7.7.3否定伪类 7.7.4 UI伪类 7.7.5 目标选择器 7. 复合选择器 7.1 交集选择器 作用:…...
测试工程师Ai应用实战指南简例prompt
以下是一个真实具体的案例,展示测试工程师如何在不同阶段结合DeepSeek提升效率。案例基于电商平台"订单超时自动关闭"功能测试: 案例背景 项目名称:电商平台订单系统V2.3 测试目标:验证"用户下单后30分钟未支付,订单自动关闭并释放库存"功能 技术栈:…...

贪心人生,贪心算法
引言 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(或最有利)的选择,从而希望导致全局最优解的算法。贪心算法的核心思想是局部最优解能够导致全局最优解。 贪心算法通常用于解决最优化问题…...

【论文阅读笔记】用于恶劣天气条件下的目标检测的IA-YOLO(Image-Adaptive YOLO) | 适合雾天和低光照场景
目录 摘要 1 方法 ■ DIP模块 ▲像素级滤波器 ▲锐化滤波器 ▲去雾滤波器 ■ CNN-PP Module ■ 检测网络模块 ■ 混合数据训练 2 实验 ■ 实现细节 ■ 有雾图像上的实验 ■ 低照度图像上的实验 ■ 消融研究 ■ 有效分析 结论 论文题目:Image-Adapti…...
【Elasticsearch】Set up a data stream 创建data stream
在 Elasticsearch 中,数据流(Data Stream)是一种用于管理时间序列数据的高级功能,它通过自动管理索引的生命周期和版本控制,简化了大规模时间序列数据的存储和查询。以下是结合上述翻译内容,对 Elasticsear…...

redhat无网利用iso搭建本地yum源
redhat8 挂载iso镜像到本地目录 第一种方法: 上传rhel8的iso文件到服务器。 mkdir /mnt/cdrom mount -t iso9660 -o loop rhel-8.10-x86_64-dvd.iso /mnt/cdrom 第二种方法: 如果是vmware等自己安装的虚拟机,可以直接挂载iso镜像到cd/dvd…...

我的ChatGPT怎么登不上?
近期,不少用户反馈在使用ChatGPT时遇到登录困难、连接超时等问题。本文将从技术角度分析常见原因,并提供合规、安全的解决方案,同时结合开发者实际需求推荐实用工具,助您高效应对登录障碍。 ChatGPT登录失败的常见原因 网络环境限…...

飞机大战lua迷你世界脚本
-- 迷你世界飞机大战 v1.2 -- 星空露珠工作室制作 -- 最后更新:2024年1月 ----------------------------- -- 迷你世界API适配配置 ----------------------------- local UI { BASE_ID 7477478487091949474-22856, -- UI界面ID ELEMENTS { BG 1, -- 背景 BTN_LE…...

链表常用技巧和操作总结
链表是我们数据结构很重要的一点,也是常考的点 接下来我会先进行技巧总结,然后再通过具体的题来进行详解 总结 1.常用技巧 画图: 用笔是肯定比只用脑子强的,画图会更加清晰 引入虚拟头节点: 便于处理边界: 如果没有头节点,也就是第一个节点就有有效数据,就需要考虑边界问题…...
CSS的列表属性
列表相关属性,可以用在ul,ol,li元素上. CSS属性名功能属性值 list-style-type 设置列表符号 常用值如下: none:不显示前面的标识(很常用!) square:实心方块 disc:圆形 decimal:数字 lower-roma:小写罗马字 upper-roman:大写罗马字 lower-alph:小写字母 upper-alpha:大写字母 …...
Django 5实用指南(十三)安全性与防护
随着Web应用的普及,安全性问题越来越成为开发者关注的重点。Django5为Web开发者提供了强大的安全防护功能,可以帮助开发者防范常见的Web攻击,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)…...

cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼
一、基础使用:Cesium.js基础使用(vue)-CSDN博客 1、基础路径 为 Cesium 库设置一个全局变量 CESIUM_BASE_URL,用于指定 Cesium 的资源文件(如 WebGL shaders、纹理、字体等)的 示例场景:假设你…...

Go红队开发—编解码工具
文章目录 开启一个项目编解码工具开发Dongle包Base64编解码摩斯密码URL加解密AES加解密 MD5碰撞工具开发 开启一个项目 这作为补充内容,可忽略直接看下面的编解码: 一开始用就按照下面的步骤即可 1.创建一个文件夹,你自己定义名字(建议只用…...

计算机毕业设计SpringBoot+Vue.js常规应急物资管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
thinkphp5对接阿里云ocr试卷切题
thinkphp5对接阿里云ocr试卷切题 提示:切题使用的是api:RecognizeEduPaperCut 以下是基于 ThinkPHP5.14 框架调用阿里云 RecognizeEduPaperCut 接口的详细实现步骤和代码示例。 文章目录 thinkphp5对接阿里云ocr试卷切题前言1、前置准备2、 配置文件3、控制器直接引…...

AI数据分析:用DeepSeek做数据清洗
在当今数据驱动的时代,数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展,AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础,其目的是…...

免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全
软件技术 今天要给大家分享一款超实用的 PDF 处理工具,它免费又轻巧,如同随时待命的得力小帮手,功能之强大超乎想象,真的值得大家收藏。 这款工具是绿色版软件,解压后开启,满满的 PDF 处理功能便映入眼帘…...

基于JavaWeb开发的Java+SpringBoot+vue+element实现物流管理系统
基于JavaWeb开发的JavaSpringBootvueelement实现物流管理系统 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定…...

计算机毕业设计SpringBoot+Vue.js华强北商城二手手机管理系统 (源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...