返回顶部
首页 > 资讯 > 移动开发 >Android13 加强Intent filters 的安全性
  • 785
分享到

Android13 加强Intent filters 的安全性

2024-04-02 19:04:59 785人浏览 薄情痞子
摘要

目录Intent filters block non-matching intents具体变更豁免适配办法残留Safer exporting of context-reGIStere

前言:

在看这个变更之前,我们需要回忆下 Android 12 的一个安全性变更, 即声明了 <intent-filter> 的Activity、BroadcastReceiver、Service 必须声明 android:exported, 否则将会无法被启动。

Android 12 的这个变更是为了防止开发者在不知情的情况下,声明了一个 intent-filter 就会使得这些组件对外公开,一定程度下强化了安全性。

但是却漏掉了显式 Intent 启动和 Broadcast Receiver 动态注册两种情况,便在 13 中分别推出了两项变更来进行加强。

  • Intent filters block non- -matching intents
  • Safer exporting of context- -registered receivers

Intent filters block non-matching intents

Android 13 开始 Intent 过滤器会屏蔽不匹配的 intent,即便是指定了 Component 的显式启动。

在 13 以前:

  • 开发者想给 Component 添加 支持
  • 这个 需要公开给外部 App 使用,便设定了 Component exported 为 true
  • 这时候该 Component 就出现了一个安全漏洞:外部 App 使用不同于 中声明的 Action,甚至 mimeType 都不匹配均可以启动它

也许你觉得这并没有什么,但是如果 App 只针对 过来的 Route 做了安全校验,就造成了校验上的疏漏。

具体变更

假如我们提供了的 Activity 像如下一样声明:

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <cateGory android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.TEST" />
        <data android:mimeType="vnd.android.cursor.dir/event"/>
    </intent-filter>
</activity>

在 13 之前,其他 App 采用了显式启动,即便是错误的 ACTION 是可以正常启动我们的 Activity。

private fun testIntentFilters() {
    Intent().setComponent(
        ComponentName("com.example.demoapplication",
            "com.example.demoapplication.MainActivity")
    ).apply {
        action = "android.intent.action.TEST_A"
        startActivity(this)
    }
}

而运行在 13 上的话,将无法启动并会发生如下错误:

PackageManager: Intent does not match component's intent filter: Intent { act=android.intent.action.TEST_A cmp=com.example.demoapplication/.MainActivity }

PackageManager: Access blocked: ComponentInfo{com.example.demoapplication/com.example.demoapplication.MainActivity}

除了 ACTION 修改正确以外,data 也要满足即 Intent-filter 完全符合才可以启动。

private fun testIntentFilters() {
    Intent().setComponent(
        ComponentName("com.example.demoapplication",
            "com.example.demoapplication.MainActivity")
    ).apply {
        action = "android.intent.action.TEST"
        data = CalendarContract.Events.CONTENT_URI
        startActivity(this)
    }
}

豁免

如下的几种场景下的 Intent 并不在本次变更的影响范围内:

  • 目标 Component 没有声明 <intent-filter>
  • 同一个 App 内部发出的 Intent
  • 系统发出的 Intent,包括 SystemServer、采用 System UID 的系统 App
  • Root 进程发出的 Intent

适配办法

如果目标运行的版本基于 Android 13,并且不是上述豁免对象的话,需要做些检查和必要的修改。

按照启动方和目标方两种情况进行适配办法的探讨:

  • 作为启动方:
    • 是否存在采用显式 Intent 方式启动其他 App 或发送广播的情况
      • startActivity()
      • startActivityForResult()
      • sendBroadcast()
    • 该 Component 是否声明了 <intent-filter>
    • 防止其 Target 升级到了 Android 13 无法正常启动,需要注意 Intent 的 action、data 等信息是否准确
  • 作为目标方:
    • Target 是否需要升级到 Android 13
    • 是否对外提供了 Component 并声明了 <intent-filter>
    • 防止无法被正常启动,需要告知启动方 <intent-filter> 的信息

残留

13 上实测发现 Service 组件在显式启动下,即便是错误的 ACTION,仍能被正常启动。这是有意为之还是 Beta 版漏洞,源码尚未公开,原因未知。

  • startService()
  • startForegroundService()
  • bindService()

Safer exporting of context-registered receivers

为了帮助提高运行时接收器的安全性,Android 13 允许您指定您应用中的特定广播接收器是否应被导出以及是否对设备上的其他应用可见。

如果导出广播接收器,其他应用将可以向您的应用发送不受保护的广播。此导出配置在以 Android 13 或更高版本为目标平台的应用中可用,有助于防止一个主要的应用漏洞来源。

具体变更

TargetSDK 升级到 Android13 的 App 在动态注册 Receiver 的时候不指明该 flag,那么会收到如下的 crash:

java.lang.SecurityException: com.example.demoapplication: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts

目前上述限制不是默认生效的,需要开启如下兼容性变更:

  • 开发者选项 -> App Compatibility Changes -> Your App -> DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED

另外,当你的 Receiver 声明了 RECEIVER_NOT_EXPORTED 的话,其他 App 向其发送广播会失败,并打印如下日志提醒你的 Receiver 需要公开:

BroadcastQueue: Exported Denial: sending Intent { act=com.example.demoapplication.RECEIVER flg=0x10 }, action: com.example.demoapplication.RECEIVER from com.example.tiramisu_demo (uid=10161)

due to receiver ProcessRecord{8e5f11c 16942:com.example.demoapplication/u0a158} (uid 10158) not specifying RECEIVER_EXPORTED

豁免

需要留意的是,系统级广播是受保护的,普通 App 没有权限发送。

所以只是监听系统广播的话,动态注册的 Receiver 无需指定上述 flag。即便指定了 RECEIVER_NOT_EXPORTED,和静态注册方式一致也能正常接收、不受影响。

适配办法

找到所有动态注册 Broadcast Receiver 的代码。如果监听的包含非系统广播,请根据是否公开给其他 App 的需要使用来添加 flag 的声明。

  • RECEIVER_EXPORTED
  • RECEIVER_NOT_EXPORTED
context.registerReceiver(sharedBroadcastReceiver, intentFilter,
    RECEIVER_EXPORTED)
context.registerReceiver(privateBroadcastReceiver, intentFilter,
    RECEIVER_NOT_EXPORTED)

结语

无论是针对 Intent Fitler 匹配的要求升级还是动态注册的 Receiver Flag,都是为了增强组件安全。希望开发者在对待这些习以为常的三大组件时,多些思考、避免漏洞百出。

到此这篇关于Android13 加强Intent filters 的安全性的文章就介绍到这了,更多相关Android Intent filters 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android13 加强Intent filters 的安全性

本文链接: https://lsjlt.com/news/149812.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android13 加强Intent filters 的安全性
    目录Intent filters block non-matching intents具体变更豁免适配办法残留Safer exporting of context-registere...
    99+
    2024-04-02
  • Android13如何加强Intent filters的安全性
    今天小编给大家分享一下Android13如何加强Intent filters的安全性的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-06-30
  • SSH安全性的加强步骤
    本篇内容主要讲解“SSH安全性的加强步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SSH安全性的加强步骤”吧!OpenSSH 6.2 以后的版本多了一个配置项 AuthenticationM...
    99+
    2023-06-05
  • PHP8如何通过Sanitize Filters来增强应用程序的安全性?
    PHP是一门广泛应用于Web开发的脚本语言,而安全性一直是Web应用程序开发者需要关注的重要问题。PHP8提供了一种称为Sanitize Filters的机制,通过对用户输入进行过滤和清理,可以增强应用程序的安全性。本文将详细介绍PHP8中...
    99+
    2023-10-22
    PHP 安全性 Sanitize Filters
  • 怎样加强香港服务器的安全性
    强香港服务器安全性的方法:1、定期安装或更新香港服务器的操作系统、软件以及补丁;2、对香港服务器安装防火墙,并配置防御规则;3、为香港服务器安装防病毒和防恶意软件扫描程序;4、采用为DDoS防护设计的香港高防服务器;5、定期对香港服务器进行...
    99+
    2024-04-02
  • 如何加强香港服务器的安全性
    加强香港服务器安全性的方法:1.操作系统安全,做好病毒防护;2.网络使用安全 ,利用防火墙;3.数据管理安全,对数据进行备份与恢复;具体分析如下:操作系统安全 服务器的安全作为网络业务顺利开展的前提,在服务器的使用中,对密码类的要做到定期修...
    99+
    2024-04-02
  • 如何加强美国服务器的安全性
    加强美国服务器的安全性的方法:1、定期更新系统和软件,避免服务器出现漏洞;2、安装防火墙,防止恶意流量攻击;3、安装防病毒和防恶意软件扫描程序,确保服务器系统安全;4、配置DDoS高防,检测所有恶意流量并进行清洗;5、定期进行安全审计,确保...
    99+
    2024-04-02
  • 如何加强高防服务器安全性策略
    加强高防服务器安全性策略的方法:1、将高防服务器不必要的服务和端口进行过滤;2、对高防服务器现有的网络主节点进行定期扫描;3、充分利用网络设备保护高防服务器的网络资源;4、通过充足的机器来承受黑客攻击;5、在高防服务器的骨干节点上配置防火墙...
    99+
    2024-04-02
  • 如何设置CentOS防火墙以加强安全性
    要设置CentOS防火墙以加强安全性,可以按照以下步骤进行:1. 检查防火墙状态:可以使用以下命令来检查防火墙的状态:```shel...
    99+
    2023-10-10
    CentOS
  • 怎么加强服务器的安全
    这篇文章主要介绍“怎么加强服务器的安全”,在日常操作中,相信很多人在怎么加强服务器的安全问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么加强服务器的安全”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!1....
    99+
    2023-06-27
  • 如何通过PHP8的Sanitize Filters提高应用程序的安全性?
    如何通过PHP8的Sanitize Filters提高应用程序的安全性?随着网络应用的普及和用户隐私保护的重要性逐渐增加,开发者们对于应用程序的安全性变得越来越关注。PHP8的引入了Sanitize Filters,使开发人员能够更加方便地...
    99+
    2023-10-22
    PHP 应用程序安全 Sanitize Filters
  • 如何加强Linux容器安全
    这篇“如何加强Linux容器安全”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何加强Linux容器安全”文章吧。容器安全解...
    99+
    2023-06-27
  • 加强阿里云服务器安全性的方法与建议
    随着互联网技术的快速发展,越来越多的企业和个人开始使用阿里云服务器来存储和处理敏感数据。然而,网络安全威胁也日益增加,因此,如何加强阿里云服务器的安全性成为了企业和个人关注的重要问题。本文将介绍一些提高阿里云服务器安全性的方法和建议。 阿里...
    99+
    2023-11-20
    阿里 安全性 建议
  • 怎么加强云服务器的安全
    加强云服务器安全的方法:1、加强云服务器的物理安全,包括温度、湿度、供电等环境因素;2、加强云服务器网络端口的安全,定期或及时升级杀毒软件,安装系统补丁,设置防火墙;3、加强云服务器的数据安全,设置账号和密码保护,定期对服务器数据进行备份。...
    99+
    2024-04-02
  • 如何加强云服务器的安全
    加强云服务器的安全可以采取以下措施: 使用强密码:确保所有登录凭证和密码都足够强大,包括数字、字母、特殊字符的组合,并定期更改密...
    99+
    2024-05-07
    云服务器
  • CentOS7中怎么加强系统安全
    要加强CentOS7系统的安全性,可以采取以下措施: 更新系统:定期更新操作系统和安全补丁来修复已知的漏洞。 安装防火墙:配...
    99+
    2024-03-04
    CentOS7
  • 使用Microsoft Edge增强Web安全性
    使用Microsoft Edge可以增强Web安全性的几种方法包括:1. 使用内置的反钓鱼和恶意软件保护:Microsoft Edg...
    99+
    2023-09-12
    Microsoft
  • 如何加强免备案云空间的安全
    加强免备案云空间安全的方法:1、加强云空间的物理安全,包括温度、湿度、供电等环境因素;2、加强云空间网络端口的安全,定期或及时升级杀毒软件,安装系统补丁,设置防火墙;3、加强云空间的数据安全,设置账号和密码保护,定期对服务器数据进行备份。具...
    99+
    2024-04-02
  • 加强您的Linux服务器安全性:配置和管理身份验证
    1. 使用强密码:确保所有用户使用强密码,包括至少8个字符,包含大写字母、小写字母、数字和特殊字符。2. 禁止root登录:禁用ro...
    99+
    2023-10-09
    Linux
  • 如何增强服务器租用的安全性
    增强服务器租用安全性的方法:1、定期对服务器数据进行备份,以免出现备份数据遗漏或丢失的情况;2、修改服务器权限密码,并定期更换,以保证服务器的安全。具体内容如下:对服务器数据进行备份服务器数据备份是管理员在日常维护中的一个非常重要的环节,但...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作