当前位置: 首页 > news >正文

Android中的usescleartexttraffic属性详解

Android中的usescleartexttraffic属性详解

usesCleartextTraffic 是 Android 应用程序开发中的一个重要配置选项,用于控制应用程序是否允许通过不加密的 HTTP 协议进行网络通信。在 Android 应用的开发过程中,正确地配置 usesCleartextTraffic 对于保护用户数据安全、符合最佳实践和遵守法律法规非常重要。下面将详细介绍 usesCleartextTraffic 的概念、用法、最佳实践及相关技术细节。

1. usesCleartextTraffic 概述

在 Android 应用程序中,usesCleartextTraffic 是一个位于 AndroidManifest.xml 文件中的属性。它定义了应用是否可以通过 HTTP 这样的明文协议进行网络通信。由于 HTTP 协议传输的数据是不加密的,因此在现代应用中通常推荐使用 HTTPS 来保障数据的安全性。

定义

usesCleartextTrafficapplication 标签中的一个布尔属性,用于指示应用是否可以进行明文网络通信。其默认值为 false,这意味着如果没有显式声明 usesCleartextTraffic,应用会默认不允许进行明文网络通信。

<applicationandroid:usesCleartextTraffic="true"  <!-- 允许明文流量 -->...>...
</application>

2.使用 usesCleartextTraffic 的配置方式

2.1 AndroidManifest.xml 中配置

要配置 usesCleartextTraffic,你需要在 AndroidManifest.xml 文件中的 application 标签中添加相应的属性:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapp"><applicationandroid:usesCleartextTraffic="true"  <!-- 或者设置为 false -->...>...</application>
</manifest>
  • 设置为 true:允许应用进行明文通信。

  • 设置为 false:不允许应用进行明文通信(推荐设置)。

2.2 Network Security Configuration 文件中配置

你也可以通过 networkSecurityConfig 来更细粒度地控制网络通信安全性,尤其是针对不同的域名或主机进行配置。

<applicationandroid:networkSecurityConfig="@xml/network_security_config"...>...
</application>

network_security_config.xml 文件示例:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><domain-config cleartextTrafficPermitted="false"><domain includeSubdomains="true">example.com</domain></domain-config><domain-config cleartextTrafficPermitted="true"><domain includeSubdomains="true">allow-cleartext.com</domain></domain-config>
</network-security-config>

在这个配置中,cleartextTrafficPermitted 用于指示是否允许明文流量。你可以为不同的域名进行不同的配置。

3. usesCleartextTraffic 的最佳实践

3.1 遵循安全最佳实践

  • 使用 HTTPS:现代应用程序应尽可能使用 HTTPS 进行所有网络通信,以确保数据在传输过程中的安全性和隐私性。HTTP 传输的数据是明文的,容易被中间人攻击(MITM),因此不推荐使用。

3.2 默认情况下禁用明文流量

  • 配置 usesCleartextTrafficfalse:默认情况下将 usesCleartextTraffic 设置为 false 是一个好的安全实践。这样可以防止应用程序在未经加密的情况下进行网络通信。

3.3 精细控制网络配置

  • 使用 Network Security Configuration 文件:如果确实需要使用明文流量,使用 Network Security Configuration 文件来指定仅对特定的域名或主机允许明文流量。这种做法可以将风险最小化,并保持大多数通信的加密状态。

3.4 评估和更新依赖库

  • 检查第三方库的网络通信:确保你使用的所有第三方库和服务也遵循了相同的安全标准。如果这些库在默认情况下使用 HTTP 而不是 HTTPS,你可能需要更新或替换这些库。

4. 相关问题与解决方案

常见问题

  1. 我的应用在 API 级别 28 及以下版本上正常工作,但在 API 级别 29 及以上版本中出现问题。为什么?

    从 Android 9(API 级别 28)开始,系统默认不允许明文流量。为了在这些版本中允许明文流量,你需要显式设置 usesCleartextTraffic 属性或使用 Network Security Configuration 文件。

  2. 如何处理第三方 SDK 或服务要求 HTTP?

    如果某些第三方服务只支持 HTTP,你可以在 network_security_config.xml 中为这些服务配置允许明文流量,或者联系服务提供商请求支持 HTTPS。

5.使用场景和影响

5.1 默认配置

  • 默认情况下,Android 9.0(API 级别 28)及更高版本不允许应用发送或接收明文流量。这是为了提高数据的安全性,防止网络中间人攻击等安全问题。

5.2 清除文本流量

  • 如果你的应用需要通过 HTTP(而不是 HTTPS)与后端服务器通信,你必须明确声明 usesCleartextTraffic 属性并将其设置为 true。这会使得 Android 系统允许应用发送和接收未加密的网络流量。

<applicationandroid:usesCleartextTraffic="true">...
</application>
  • 这种设置通常不推荐,因为明文传输的数据易受攻击和窃听。推荐的做法是尽可能使用 HTTPS 加密传输数据,以确保通信的安全性和数据的保密性。

5.3 适配性

  • 如果你的应用需要向后兼容旧版本的 Android(低于 9.0),并且必须使用 HTTP,请确保在 AndroidManifest.xml 中设置 usesCleartextTraffictrue。但是,建议在可能的情况下升级你的后端服务以支持 HTTPS。

6.注意事项

  • 安全性问题:使用明文传输的数据容易被攻击者窃听和篡改,因此除非绝对必要,应尽量避免使用 usesCleartextTraffic="true"

  • API 级别限制:从 Android 9.0 开始,应用默认禁止使用明文传输。为了兼容性和安全性,推荐尽快迁移至 HTTPS。

总之,usesCleartextTraffic 属性提供了一种在 Android 应用中配置网络安全性的方法,但开发者应根据实际需求和安全最佳实践来合理配置,保障用户数据的安全和隐私。

总结

usesCleartextTraffic 是一个关键的配置项,用于管理 Android 应用中的明文网络流量。正确地配置这一属性对于确保应用的数据安全性和隐私保护至关重要。在大多数情况下,应当遵循安全最佳实践,使用 HTTPS 替代 HTTP,并在 Network Security Configuration 文件中精细地控制不同域名的流量规则。

配置示例

<applicationandroid:usesCleartextTraffic="false"...>...
</application>

网络安全配置示例

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><domain-config cleartextTrafficPermitted="false"><domain includeSubdomains="true">example.com</domain></domain-config><domain-config cleartextTrafficPermitted="true"><domain includeSubdomains="true">allow-cleartext.com</domain></domain-config>
</network-security-config>

通过这些配置,可以确保你的应用程序在网络通信中遵循最佳的安全实践,并且根据实际需求进行灵活的调整。

参考资料

  • Google Developers - usesCleartextTraffic

  • Google Developers - Network Security Configuration

  • Android Developers - Network Security Configuration

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《学会 SpringBoot · 参数校验》
  • MyBatis基本工作原理
  • vue3中父子组件的双向绑定defineModel详细使用方法
  • Redis(三)
  • 27、美国国家冰雪中心(NSIDC)海冰密集度月数据下载与处理
  • MFC窗口大小最大化最小化随拖动调整大小
  • Golang | Leetcode Golang题解之第283题移动零
  • 【Go系列】Go的UI框架Fyne
  • SQL Server中非结构化数据的存储神器:文件表的魔力
  • 21 B端产品经理之技术常识(1)
  • Python | Leetcode Python题解之第284题窥视迭代器
  • Alternating Sum
  • web基础,http协议,apache概念及nginx
  • C#小结:string、double、TimeSpan等常见类型的小结和坑点
  • mysql的存储过程:
  • “大数据应用场景”之隔壁老王(连载四)
  • CAP 一致性协议及应用解析
  • cookie和session
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Linux后台研发超实用命令总结
  • python docx文档转html页面
  • 编写符合Python风格的对象
  • 分享一份非常强势的Android面试题
  • 高度不固定时垂直居中
  • 构建二叉树进行数值数组的去重及优化
  • 构造函数(constructor)与原型链(prototype)关系
  • 简单基于spring的redis配置(单机和集群模式)
  • 使用common-codec进行md5加密
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 最简单的无缝轮播
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #android不同版本废弃api,新api。
  • #Linux(帮助手册)
  • #大学#套接字
  • #每天一道面试题# 什么是MySQL的回表查询
  • $$$$GB2312-80区位编码表$$$$
  • (3)nginx 配置(nginx.conf)
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (poj1.3.2)1791(构造法模拟)
  • (第27天)Oracle 数据泵转换分区表
  • (二)fiber的基本认识
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (剑指Offer)面试题34:丑数
  • (七)Activiti-modeler中文支持
  • (转)scrum常见工具列表
  • *1 计算机基础和操作系统基础及几大协议
  • .ai域名是什么后缀?
  • .net dataexcel 脚本公式 函数源码
  • .NetCore 如何动态路由