- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android安全访问机制
主要内容
1、安全架构
2、用户ID和文件存取
3、权限管理(permission)
4、使用权限(uses-permission)
4.1、使用低级权限
4.2、使用高级权限
5、组件权限
6、URI权限
==================================================================================
Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行。系统和应用之间的安全性通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给应用程序分配user ID和Group ID。更细化的安全特性是通过Permission机制对特定的进程的特定的操作进行限制,而per-URI permissions可以对获取特定数据的access专门权限进行限制。
所以,应用程序之间一般是不可以互相访问的,但是anroid提供了一种permission机制,用于应用程序之间数据和功能的安全访问。
一、安全架构
Android安全架构中一个中心思想就是:应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。这包括读或写用户的私有数据(如联系人数据或email数据),读或写另一个应用程序的文件,网络连接,保持设备处于非睡眠状态等。
一个应用程序的进程就是一个安全的沙盒。它不能干扰其它应用程序,除非显式地声明了permissions,以便它能够获取基本沙盒所不具备的额外的能力。它请求的这些权限(permissions)会被系统做各种处理,比如自动允许该权限或者通过用户提示或者证书来禁止该权限。应用程序需要的那些“permissions”是静态的在程序中声明,所以他们会在程序安装时被知晓,并不会再改变。
所有的Android应用程序必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要CA签名认证(注:CA就是一个第三方的证书认证机构,如verisign等)。Android应用程序允许而且一般也都是使用self- signed证书(即自签名证书)。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是通过决定谁可以进入基于签名的permisssions,以及谁可以share 用户IDs。
二、用户ID和文件存取
每一个Android应用程序都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触(也不会让其它应用程序接触它)。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。
由于安全性限制措施是发生在进程级,所以两个package中的代码不会运行在同一个进程当中,他们要作为不同的Linux用户出现。我们可以通过使用AndroidManifest.xml文件中的manifest标签中的sharedUserId属性,来使不同的package共用同一个用户 ID。通过这种方式,这两个package就会被认为是同一个应用程序,拥有同一个用户ID(实际不一定),并且拥有同样的文件存取权限。
注意:为了保持安全,只有当两个应用程序被同一个签名签署的时候(并且请求了同一个sharedUserId)才会被分配同样的用户ID。
所有存储在应用程序中的数据都会赋予一个属性:该应用程序的用户ID,这使得其他package无法访问这些数据。当通过方法getSharedPreferences、openFileOutput、openOrCreateDatabase来创建一个新文件时,你可以通过使用MODE_PRIVATE(只能在应用内使用)、MODE_WORLD_READABLE(其他应用只有读的权限) 或者 MODE_WORLD_WRITEABLE(其他应用只有写的权限)标志位来设置是否允许其他apk来访问读写这个文件。当设置这些标志位时,该文件仍然属于该应用程序, 但是文件的读写权限已经被设置,使得它对于其他任何应用程序都是可见的。
示例:
A 和B 都是C公司的产品,那么如果用户从A中登陆成功。那么打开B的时候就不用再次登陆。具体实现就是A和B设置成同一个User ID:
A的AndroidManifest:
manifest xmlns:android=/apk/res/android
package=AndroidTest.pack.A
android:sharedUserId=du.apk
B的AndroidManifest:
manifest xmlns:android=/apk/res/android
文档评论(0)