android安全访问机制

上传人:小** 文档编号:89122071 上传时间:2019-05-18 格式:DOC 页数:5 大小:24KB
返回 下载 相关 举报
android安全访问机制_第1页
第1页 / 共5页
android安全访问机制_第2页
第2页 / 共5页
android安全访问机制_第3页
第3页 / 共5页
android安全访问机制_第4页
第4页 / 共5页
android安全访问机制_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《android安全访问机制》由会员分享,可在线阅读,更多相关《android安全访问机制(5页珍藏版)》请在金锄头文库上搜索。

1、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可以对获取特定数据

2、的access专门权限进行限制。所以,应用程序之间一般是不可以互相访问的,但是anroid提供了一种permission机制,用于应用程序之间数据和功能的安全访问。一、安全架构Android安全架构中一个中心思想就是:应用程序在默认的情况下不可以执行任何对其他应用程序,系统或者用户带来负面影响的操作。这包括读或写用户的私有数据(如联系人数据或email数据),读或写另一个应用程序的文件,网络连接,保持设备处于非睡眠状态等。一个应用程序的进程就是一个安全的沙盒。它不能干扰其它应用程序,除非显式地声明了permissions,以便它能够获取基本沙盒所不具备的额外的能力。它请求的这些权限(permi

3、ssions)会被系统做各种处理,比如自动允许该权限或者通过用户提示或者证书来禁止该权限。应用程序需要的那些“permissions”是静态的在程序中声明,所以他们会在程序安装时被知晓,并不会再改变。所有的Android应用程序必须用证书进行签名认证,而这个证书的私钥是由开发者保有的。该证书可以用以识别应用程序的作者。该证书也不需要CA签名认证(注:CA就是一个第三方的证书认证机构,如verisign等)。Android应用程序允许而且一般也都是使用self- signed证书(即自签名证书)。证书是用于在应用程序之间建立信任关系,而不是用于控制程序是否可以安装。签名影响安全性的最重要的方式是

4、通过决定谁可以进入基于签名的permisssions,以及谁可以share 用户IDs。二、用户ID和文件存取每一个Android应用程序都会在安装时就分配一个独有的Linux用户ID,这就为它建立了一个沙盒,使其不能与其他应用程序进行接触(也不会让其它应用程序接触它)。这个用户ID会在安装时分配给它,并在该设备上一直保持同一个数值。由于安全性限制措施是发生在进程级,所以两个package中的代码不会运行在同一个进程当中,他们要作为不同的Linux用户出现。我们可以通过使用AndroidManifest.xml文件中的manifest标签中的sharedUserId属性,来使不同的packag

5、e共用同一个用户 ID。通过这种方式,这两个package就会被认为是同一个应用程序,拥有同一个用户ID(实际不一定),并且拥有同样的文件存取权限。注意:为了保持安全,只有当两个应用程序被同一个签名签署的时候(并且请求了同一个sharedUserId)才会被分配同样的用户ID。所有存储在应用程序中的数据都会赋予一个属性:该应用程序的用户ID,这使得其他package无法访问这些数据。当通过方法getSharedPreferences、openFileOutput、openOrCreateDatabase来创建一个新文件时,你可以通过使用MODE_PRIVATE(只能在应用内使用)、MODE_W

6、ORLD_READABLE(其他应用只有读的权限) 或者 MODE_WORLD_WRITEABLE(其他应用只有写的权限)标志位来设置是否允许其他apk来访问读写这个文件。当设置这些标志位时,该文件仍然属于该应用程序, 但是文件的读写权限已经被设置,使得它对于其他任何应用程序都是可见的。示例:A 和B 都是C公司的产品,那么如果用户从A中登陆成功。那么打开B的时候就不用再次登陆。具体实现就是A和B设置成同一个User ID:A的AndroidManifest:B的AndroidManifest:这个du.apk就是user id。 以后B就可以像打开本地数据库那样打开A中的数据库了。三、权限管

7、理(permission)权限用来描述是否拥有做某件事的权力。Android系统中权限分为普通级别(Normal),危险级别(dangerous),签名级别(signature)和系统/签名级别(signature or system)。系统中所有预定义的权限根据作用的不同,分别属于不同的级别。对于普通和危险级别的权限,我们称之为低级权限,应用申请即授予。其他两级权限,我们称之为高级权限或系统权限,应用拥有platform级别的认证才能申请。当应用试图在没有权限的情况下做受限操作,应用将被系统杀掉以警示。系统应用可以使用任何权限。权限的声明者可无条件使用自己所声明的权限。四、使用权限(uses

8、-permission)应用需要的权限应当在users-permission属性中申请,所申请的权限应当被系统或某个应用所定义,否则视为无效申请。同时,使用权限的申请需要遵循权限授予条件,非platform认证的应用无法申请高级权限。所以,程序间访问权限大致分为两种:第一种低级点的(permission的protectlevel属性为normal或者dangerous),其调用者apk只需声明即可拥有其permission。第二种高级点的(permission的protectlevel属性为signature或者signatureorsystem),其调用者apk就需要和被调用的apk一样拥有

9、相同的signature。若想拥有使用权限,必须在AndroidManifest.xml文件中包含一个或更多的 标签来声明此权限。4.1、使用低级权限例如,一个需要监听来自SMS消息的应用程序将要指定如下内容: 应用程序安装的时候,应用程序请求的permissions是通过package installer来批准获取的。package installer是通过检查该应用程序的签名来确定是否给予该程序所请求的权限。在用户使用过程中不会去检查权限,也就是说要么在安装的时候就批准该权限,使其按照设计可以使用该权限;要么就不批准,这样用户也就根本无法使用该权限所描述的功能,也不会有任何提示告知用户尝试

10、失败。4.2、使用高级权限例如,如果一个应用想要使用system级别权限设定的api时,需要使其apk拥有system权限。比如SystemClock.setCurrentTimeMillis()方法就属于system级别。这种情况下有两个方法可以使用此api:第一个方法简单点,不过需要在Android系统源码的情况下用make来编译:1、在应用程序的AndroidManifest.xml中的manifest节点中插入:android:sharedUserId=android.uid.system这个属性2、修改Android.mk文件,插入LOCAL_CERTIFICATE := platf

11、orm这一行3、使用mm命令来编译,生成的apk就有修改系统时间的职权范围了。第二个方法麻烦点,不过不需要在源码下用make来编译:1、同上,插入android:sharedUserId=android.uid.system这个属性。2、使用eclipse编译出apk文件,但是这个apk文件是不能用的。3、使用针系统的platform密码钥匙来重新给apk文件签名。signapk platform.x509.pem platform.pk8 input.apk output.apk五、组件权限可以为某个组件单独添加权限,在AndroidManifest文件中声明组件的时候,如果为组件添加了an

12、droid:permission属性,那么该组件就添加了访问权限,比如在Phone模块的AndroidManifest文件内: . Activity 权限:为Activity 增加权限,限制是否能启动该Activity。在startActivity()和startActivityForResult() 期间检查。Service 权限为Service 增加权限,限制是否能启动、绑定该Service 。此权限在 startService(), stopService() 和 bindService() 期间要经过检查;BroadcastReceiver 权限为BroadcastReceiver增加

13、权限,限制发送广播者是否可以将广播发送到该BroadcastReceiver。在 sendBroadcast() 返回后将检查此权限,同时系统设法将广播递送至相关接收者。因此,权限失败将会导致抛回给调用者一个异常,它将不能递送到目的地。ContentProvider 权限为ContentProvider增加权限,用于限制其他应用是否有权限访问该ContentProvider中的数据。申请失败的情况如果调用者没有请求权限,那么会为调用抛出一个安全异常( SecurityException )。在所有这些情况下,一个SecurityException异常从一个调用者那里抛出时不会存储请求权限结果。六、URI权限到目前为止我们讨论的标准的permission系统对于content provider来说是不够的。一个content provider可能想保护它的读写权限,而同时与它对应的直属客户端也需要将特定的URI传递给其

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号