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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思MindSpore学习入门-数据处理管道支持python对象

数据处理管道中的特定操作&#xff08;如自定义数据集GeneratorDataset、自定义map增强操作、自定义batch(per_batch_map...)&#xff09;支持任意Python类型对象作为输入。为了支持此特性&#xff0c;数据管道使用了Python(dict)字典去管理不同类型的对象。与其他类型相比&…

康康近期的慢SQL(oracle vs 达梦)

近期执行的sql&#xff0c;哪些比较慢&#xff1f; 或者健康检查时搂一眼状态 oracle&#xff1a; --最近3天内的慢sql set lines 200 pages 100 col txt for a65 col sql_id for a13 select a.sql_id,a.cnt,a.pctload,b.sql_text txt from (select * from (select sql_id,co…

Nvm和Npm和Pm2的关系和使用说明

一、三者关系说明 nvm、npm 和 pm2 在 Node.js 生态系统中扮演着不同的角色&#xff0c;但它们之间存在一定的关联。下面是每个工具的作用以及它们之间的关系&#xff1a;1. nvm (Node Version Manager)• nvm 是一个用于管理多个 Node.js 版本的工具。它允许用户在不同的项目…

基于微信小程序的自习室选座系统/基于Java的自习室选座系统/自习室管理系统的设计与实现

获取源码联系方式请查看文章结尾&#x1f345; 摘要 自习室选座是学校针对用户必不可少的一个部分。在学校的整个过程中&#xff0c;学生担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类微信小程序自习室选座也在不断改进。本课题所设计的小程序自习室选座系…

【C#】Visual Studio2022打包依赖第三方库的winForm程序为exe

0.简介 IDE&#xff1a;VS2022 平台&#xff1a;C# .NetFramework4.7.2 WinForm界面 有GDAL、EEplus第三方库的依赖&#xff0c;所以在其他未安装环境的电脑中功能无法使用。 1. 安装 1.1 运行文件输出 在VS扩展中选择管理扩展&#xff0c;安装&#xff1a;Microsoft Visua…

SpringBoot上传超大文件导致OOM,完美问题解决办法

问题描述 报错: Caused by: java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) ~[?:1.8.0_381] at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117) ~[?:1.8.0_381] at java.…

Android 更换applicationId 后 微信没有回调

1、解决办法&#xff08;代码如下&#xff09;&#xff1a; 使用 <activity-alias>: 这是一个用于定义活动别名的元素。活动别名可以让您为已经定义的活动提供一个别名&#xff0c;从而可以通过别名启动原来的活动。 <activityandroid:name".wxapi.WXEntryActiv…

ES6 class 类

普通使用原型添加方法 function Animal(name) {this.name name; }Animal.prototype.speak function() {console.log(this.name makes a noise.); };function Dog(name) {Animal.call(this, name); }Dog.prototype Object.create(Animal.prototype); Dog.prototype.constr…

MQTTX连接华为云IoTDA

目录 华为IoTDA平台 MQTTX连接参数的设置 物模型的构建 属性上报 基本数据格式 时戳 我以前上课都是用巴法云服务器来演示MQTT的&#xff0c;前几天因为测试工业互联网关使用了华为的IoTDA&#xff0c;觉得也不算太复杂&#xff0c;今天尝试用MQTTX连接华为云&#xff0c…

【ARM】MDK-STM32g0xx.h文件与Define规则记录

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录问题STM32g0xx.h等有关ST的可读文件&#xff0c;尽量勿修改文件格式及对其代码进行添加和删减&#xff0c;记录查找问题的过程中的疑惑&#xff0c;并如何给予客户正确的回复&#xff0c;帮助销售完成验收&…

CefSharp音视频编译与免费下载

注&#xff1a;Cefharp 音频和视频播放编译&#xff0c;生成相应的dll文件&#xff0c;从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例&#xff0c;您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

C++笔记5

目录 图的基础问题 图上的环 无向图的环 DAG图与拓扑排序 拓扑排序 卡恩算法&#xff08;BFS&#xff09; 算法描述 统计图中每个点的入度&#xff08;即连向该点的边数&#xff09; 拓扑排序的DFS算法 算法描述 拓扑排序的DFS的实现简单&#xff0c;从一个入度为0的…

新形势下职业教育大数据人才培养策略

一、引言 随着信息技术的飞速发展&#xff0c;大数据已成为驱动经济社会变革的关键力量。在新形势下&#xff0c;职业教育作为技术技能人才培养的重要阵地&#xff0c;面临着如何适应大数据时代要求、提升人才培养质量的紧迫任务。当前&#xff0c;职业教育在大数据人才培养方…

云HIS系统源码,业务云协同和数据云协同的数字化医院信息系统

云HIS是利用云计算、大数据、物联网、移动互联网等技术&#xff0c;打造的一个安全、便捷、共享、协同的医疗互联网云生态平台。核心功能是业务云协同和数据云协同。云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势&#xff0c;重新定义了数字化医院信…

leetcode日记(49)旋转链表

其实不难&#xff0c;就是根据kk%len判断需要旋转的位置&#xff0c;再将后半段接在前半段前面就行。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : …

uniapp的h5,读取本地txt带标签的文件

效果图 使用的回显的标签是u-parse&#xff0c;下面的网址讲了这个标签的相关 https://www.cnblogs.com/huihuihero/p/12978903.html 导入此插件 https://ext.dcloud.net.cn/plugin?id364 使用 uni.request({// 本地文件url: "/static/互联网医院医师端用户协议.txt…

C# datetimePicker

1. 直接把控件拉到设计器中&#xff0c;此时不要调整控件的values属性&#xff0c;这样就可以 打开后每次默认显示当天日期。 2. 属性Format long长日期格式默认值short短日期格式Time时间格式custom自定义时间格式在customFormat这个属性设置&#xff0c;比如yyyy-MM-dd HH…

Stage模型应用程序包结构

目录 官网地址 官网结构图 开发态包结构 工程目录结构 配置文件 module.json5配置文件 app.json5配置文件 官网地址 官网地址 包结构 官网结构图 开发态包结构 在DevEco Studio上创建一个项目工程&#xff0c;并尝试创建多个不同类型的Module&#xff08;类似一个一个的页…

C 语言基础概念总结

C 语言基础概念总结 一、数据类型 目录 C 语言基础概念总结 一、数据类型 基本数据类型 构造数据类型 二、变量与常量 三、运算符与表达式 算术运算符 关系运算符 逻辑运算符 赋值运算符 自增自减运算符 四、控制流语句 顺序结构 选择结构 循环结构 五、函数 …

c++笔记1

目录 结构体 关于结构体 结构体变量 成员的获取和赋值 结构体排序 结构体与模板 结构体嵌套 结构体与函数 模板与pair 模板 pair 多重循环 多重循环结构 嵌套注意事项 多重循环实例 再谈变量的作用域 多重循环的控制 嵌套中的break和continue 多重循环中的控…