《白帽子讲 Web 安全》之移动 Web 安全

server/2025/3/3 22:46:05/

目录

摘要

一、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协议访问本地文件          
setAllowFileAccessFromFileURLsfalse  控制 file:// 域页面能否访问其他 file:// 域内容。建议关闭以减少横向渗透风险。,file域页面访问其他file资源      
setAllowUniversalAccessFromFileURLsfalse控制 file:// 域页面能否访问任意 HTTP/HTTPS 内容。必须关闭以防止跨协议攻击。,file域访问任意http/https资源  
  1. setAllowFileAccess:此属性用于设置 WebView 是否允许访问本地文件。若设置为 true,WebView 可以访问设备本地存储中的文件。然而,这也带来了安全风险,恶意网页可能借此读取用户设备上的敏感文件,如存储在本地的数据库文件、配置文件等。例如,攻击者构造的恶意网页,在 WebView 允许访问本地文件的情况下,可能尝试读取用户的登录密码存储文件(若存在此类不安全存储方式),从而获取用户密码。
  2. setAllowFileAccessFromFileURLs:该属性控制 WebView 是否允许从文件 URL 中访问其他文件。当设置为 true 时,从本地文件 URL 加载的页面可以访问其他本地文件。同样,这可能被攻击者利用,通过在本地文件中嵌入恶意代码,进而访问更多本地文件,扩大攻击范围。
  3. 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 调用摄像头、定位等硬件功能时,若未对参数进行类型和范围校验,可能引发越权操作。

防御方案: 

  1.    白名单校验:仅允许特定域名或协议调用 Native 接口。
  2. 输入过滤:对 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 开发者工具可信根证书等,以保障移动应用的安全和用户的隐私。 

喜欢的点点赞和关注,共同进步 


http://www.ppmy.cn/server/172177.html

相关文章

1688代采系统:自动化采购的高效解决方案

在跨境电商迅猛发展的今天,海外买家和跨境电商卖家面临着商品采购的诸多挑战,如语言障碍、支付不便、物流复杂等问题。为应对这些挑战,1688代采系统应运而生,它对接了1688官方API,实现了自动采集商品数据、自动代采下单…

在android studio上使用rknn模块下面的yolov8_pose模型

我的第一想法就是直接把rk的demo当成so库封装来用,我直接在yolov8_pose的c代码下面添加yolov8_pose.cc与yolov8_pose.h用作封装,先上代码 yolov8_pose.cc #include "yolov8_pose.h"#include <stdint.h> #include <stdio.h> #include <stdlib.h> #…

Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用

注&#xff1a;本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文&#xff0c;机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…

2025 GDC开发者先锋大会“人形机器人的开源之路”分论坛 | 圆桌会议:《开放协作:开源生态如何解锁人形机器人与具身智能的未来》(上篇)

在GDC全球开发者先锋大会期间&#xff0c;2月23日&#xff0c;由GDC组委会指导、国家地方共建人形机器人创新中心&#xff08;以下简称“国地中心”&#xff09;承办的“人形机器人的开源之路”主题论坛在上海西岸艺术中心成功举办。 在人工智能与机器人技术飞速发展的今天&…

C# 牵手DeepSeek:打造本地AI超能力

一、引言 在人工智能飞速发展的当下&#xff0c;大语言模型如 DeepSeek 正掀起新一轮的技术变革浪潮&#xff0c;为自然语言处理领域带来了诸多创新应用。随着数据隐私和安全意识的提升&#xff0c;以及对模型部署灵活性的追求&#xff0c;本地部署 DeepSeek 成为众多开发者和…

TCP传输过程中问题的检测和解决

TCP传输过程中问题的检测 在 Windows 和 Linux 系统中&#xff0c;可以通过以下方法检测 TCP 链接是否出现问题&#xff1a; Windows 系统 使用命令行工具&#xff1a; ping 命令&#xff1a;可初步排查网络问题。通过向目标主机发送 ICMP Echo 请求并接收响应&#xff0c;来…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(10)

详解&#xff08;10&#xff09; 初始化模块配置 if (ngx_cycle_modules(cycle) ! NGX_OK) {ngx_destroy_pool(pool);return NULL;}for (i 0; cycle->modules[i]; i) {if (cycle->modules[i]->type ! NGX_CORE_MODULE) {continue;}module cycle->modules[i]->…

2025机械考研复试面试问题汇总篇(含13门科目),考研机械复试专业面试常见重点问题总结!考研机械复试专业面试准备看这一篇就够了!

前言——25机械考研复试专业面试问题汇总 机械复试超全流程攻略 机械复试看这一个专栏就够用了!机械复试调剂英语自我介绍口语专业面试常见问题总结 机械保研面试-CSDN博客https://blog.csdn.net/weixin_56510835/article/details/143101233 本专栏包含的所有文章内容,可以看…