公开/封闭属性android:exported引出的Android系统安全技术
android:exported是Android在AndroidManifest.xml里面配置Activity或其他组件如Service或广播等的基础属性,之所以在这里挑出来单独说,是因为该属性现在经常被一些粗糙的安全漏洞扫描系统错误的理解和使用,形成不正确的分析结论。
android:exported属性常用以配置一个Android的Activity之间共享数据或互相唤起,以便作为对外共享数据的基础配置之一(之所以说之一,后面还要再说其他共享属性配置),其默认值是false(封闭)。注意!这里所说的默认值是false,是说如果当前Activity没有配置任何<intent-filter>过滤器时候,android:exported才为false,如果当前Activity配置了过滤器<intent-filter>,那么android:exported的默认值是true。这里面还有一个细节问题,是关于不同Android SDK版本也有所不同,在低于SDK 16时候,默认是true,高于SDK 16则默认是false。
android:exported的属性值true或false决定当前App是否对外暴露供其他App程序分享数据,是否可以被手机上安装的其他App唤起。假设手机上安装两个App:A和B。A如果想启动B中的一个ActivityB,那么ActivityB必须配置成android:exported为true才可以。当配置android:exported为true时候,意味着自身App接收来自于手机上的其他App的消息事件,开放状态。
android:exported的属性需要考虑到具体的场景,该属性常被一些大厂使用,比如像腾讯旗下有不少在行业具有极高市场占有率的App,通常用户在安装QQ时候,也会安装微信,也许还会安装腾讯视频,像这样的情况,腾讯可以配置自己App中某些公共Service或者Activity的android:exported为true,然后若干Activity被自家其他App识别并唤起。更何况,要想使用腾讯的一些社交分享组件如分享到微信,分享到朋友圈,分享到QQ这些,就必须配置android:exported为true了。
还是回到两个App:A与B,事实上即便B中ActivityB配置了android:exported为true。A仍然达不到与B共享数据的目的(或A唤起B中ActivityB的目的)。就像前面说的android:exported=”true”只是开始,若想真正实现A与B共享数据,还必须同时设置android:sharedUserId。
当一个App安装到手机上,它就有一个唯一的android:sharedUserId,这个android:sharedUserId伴随App从安装到卸载整个周期。同样的一个App安装到不同的手机上,会具有不同的android:sharedUserId。android:sharedUserId对应的是底层Linux的一个用户。具有相同android:sharedUserId的App可以配置成运行在Linux相同的进程空间中(配置相同android:process)。反之,不具备相同android:sharedUserId的App们,Linux禁止它们互相访问数据。
android:sharedUserId像一个人的身份证一样标识不同的App,如果不同的App像共享数据,在Linux里面,就必须具备android:sharedUserId才可以,做到这一点儿需要两个App在各自的AndroidManifest.xml配置相同的android:sharedUserId。但是一旦两个App设置相同的android:sharedUserId,那么android:exported的属性配置全部失效变得没有意义,从这里可以看到,决定是否共享的重要属性是android:sharedUserId。
而现在一些安全漏洞扫描软件,通过简陋的读取AndroidManifest.xml中定义的Android组件,错误的分析认为没有配置android:exported就是漏洞,殊不知首先需要分析该组件是否配置了过滤器<intent-filter>,如果没有配置<intent-filter>,那么android:exported本身就是false。真正需要配置的当组件配置了<intent-filter>过滤器,此时就要认真配置android:exported这儿,如果打算公开出去,那么就配置为true(其实也不必,因为有了过滤器后,默认就是true),否则false。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
软到不行的WWDC2018
转载请标明来源:https://www.cnblogs.com/zhanggui/p/9154542.html 简介 一年一度的WWDC于北京时间6月5号凌晨1点在加利福利亚州圣何塞的麦克恩利会议中心召开。这次WWDC给我最深的感受就是:软到不行。没有新的硬件发布,而是重在软件的更新和性能优化。不过这也是一件好事,至少苹果这次非常注重软件的性能优化,据说iOS12支持2013年生产以及以后的机器。我同学的iPhone 6 Plus尝试安装了iOS12beta版本,竟然流畅了很多,看来这次性能的优化还是卓有成效的。 按照惯例,苹果仍然是依次对iOS12、watchOS 5、tvOS以及Mac OS Mojava进行了介绍。 iOS12 会议刚开始,苹果先调戏了一下Android: iOS11的安装率为81%,而Android新系统的安装率之后6%。而且用户对iOS的满意度高达95%。 接下来对iOS12的性能提升提供了一组数据(iPhone 6P 安装了iOS12的数据): 从这些数据来看,苹果真的是对软件性能做了很大的努力。然后就开始了对iOS12新特性的介绍。此次更新主要涉及到...
- 下一篇
kotlin框架Anko的使用及常用的项目配置
kotlin框架Anko的使用及常用的项目配置 之前的几篇文章重复的讲了一些项目的基础配置,这一节就让我们把之前的那些抽取出来,单独的写一篇短文,之后的文章我们就直接使用这个配置就可以啦 创建我们的项目,命名为BaseProject,勾选kotlin支持 项目的代码已经上传到BlogDemo的BaseProject里啦 一、分包项目及样式修改 1)分包 我们先创建以下6个包 app 自定义Application base 基础类 module 业务包 util 工具包 view 自定义控件包 adapter 包 分包.png 2)修改标题栏 然后我们进去res-values-styles下,把主题修改成没有标题的样式 <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题