首页 > 其他分享 >Android中的usescleartexttraffic属性详解

Android中的usescleartexttraffic属性详解

时间:2024-07-24 15:56:07浏览次数:17  
标签:HTTP 配置 明文 详解 usescleartexttraffic HTTPS Android usesCleartextTraffic

Android中的usescleartexttraffic属性详解

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

1. usesCleartextTraffic 概述

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

定义

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

<application
    android: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">
    <application
        android:usesCleartextTraffic="true"  <!-- 或者设置为 false -->
        ...>
        ...
    </application>
</manifest>
  • 设置为 true:允许应用进行明文通信。

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

2.2 Network Security Configuration 文件中配置

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

<application
    android: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 文件中精细地控制不同域名的流量规则。

配置示例

<application
    android: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>

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

参考资料

标签:HTTP,配置,明文,详解,usescleartexttraffic,HTTPS,Android,usesCleartextTraffic
From: https://blog.csdn.net/netwalk/article/details/140661054

相关文章

  • Android Spingboot 实现SSE通信案例
    SSESSE(Server-SentEvents)是一种用于实现服务器主动向客户端推送数据的技术,它基于HTTP协议,利用了其长连接特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接实现服务器向客户端的实时数据推送。Server-SentEvents(SSE)和Sockets都可以用于实现服务器向客户端推......
  • Android MVP模型的学习与使用
    一、MVP(Model-View-Presenter)概叙MVP(Model-View-Presenter)是一种用于Android应用程序开发的架构模式,旨在将应用程序的不同部分分离,以提高代码的可维护性和可测试性。MVP模型包含三个主要组成部分:Model、View和Presenter。Model(模型):​ Model负责处理应用程序的数据和业务逻......
  • ADAU1761的AVC音效算法详解(Automatic Volume Control)
    作者的话AVC,AutomaticVolumeControl,自动音量控制,这是一个很有特点的算法,我们来看看他在哪里?怎么去用。硬件准备ADAU1761开发板产品链接:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-5192690539.11.28686332WA8nC3&id=38240607959USBi仿真器产品链接:https:......
  • [c语言分支循环语句详解 -----选择结构、循环结构]
            c语言是结构化的程序设计语言,分为顺序结构、选择结构、循环结构。我们生活中的所有事情都可以用三种顺序结构表示。顺序结构顺序结构是C语言的基本结构程序由上而下运行,运行完上条语句再往下运行,平时写的程序基本都用到顺序结构。选择结构我们可以使用i......
  • Android Studio查看SQLite数据库(快速方便)
    在AndroidStudio不要使用databasenavigator/DBNavigator/DBBrowser插件查看SQLite数据库,因为AndroidStudio自带的Appinspection工具可以快捷的查看当前项目的SQLite数据库。使用教程找到Appinspection位置1,就在左下角的工具栏位置2,右键左边偏上的工具栏的moret......
  • Golang格式化占位符详解
    Golang格式化占位符详解在Golang编程中,格式化字符串是一种常见的操作,它可以用来将不同类型的数据格式化为字符串输出。在格式化字符串时,占位符起着至关重要的作用,通过占位符可以指定数据的输出格式。本文将详细介绍Golang中一些常用的格式化占位符,并提供具体的代码示例供大......
  • java内部类详解
    24-07-22java内部类目录24-07-22java内部类什么是内部类内部类的分类局部内部类匿名内部类AnonymousClass(重点)成员内部类静态内部类什么是内部类简单来说,一个类的内部嵌套了另一个类结构,被嵌套的结构被称为内部类,嵌套其他类的类我们称为外部类。在开始学习之前,我们先来回想......
  • 【数据结构】队列详解和模拟实现
    大家好,今天我们学习队列,本篇博客主要涉及一般队列,环形队列和双端队列,每个队列应用场景均有所差异,下面我们一起来看看吧。队列(Queue)一,概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性入队列:进行插入操作的一端称为队尾(Ta......
  • GitHub 详解教程
    1.引言GitHub是一个用于版本控制和协作的代码托管平台,基于Git构建。它提供了强大的功能,使开发者可以轻松管理代码、追踪问题、进行代码审查和协作开发。2.Git与GitHub的区别Git是一个分布式版本控制系统,用于跟踪文件的更改历史。GitHub是一个基于Git的在线平台,......
  • 在 Kubernetes 中设置 Pod 优先级及其调度策略详解
    个人名片......