ImageVerifierCode 换一换
格式:DOC , 页数:8 ,大小:75KB ,
资源ID:10217278      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10217278.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android 开发安全经验.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

Android 开发安全经验.doc

1、Android 开发安全经验Android 是一个多进程系统,每一个应用程序(和系统的组成部分)都运行在自己的进程中。在应用程序和系统间的安全通过标准的 Linux 设备在进程级被执行,例如被分配给应用程序的用户和组 ID。额外的细粒度安全特性通过“许可”机制来提供,该机制能够对一个指定进程可实现的特定操作进行约束。内容安全结构 应用程序签名 用户标识和文件访问 权限命名 权限的声明和支持 在 AndroidManifest.xml 文件中支持权限 发送广播时支持权限 其它权限的支持 URI 权限 安全结构Android 安全学中的一个重要的设计点是在默认情况下应用程序没有权限执行对其它应用程

2、序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据(例如联系方式或 e-mail),读/写其它应用程序的文件,执行网络访问,保持设备活动,等等。 应用程序的进程是一个安全的沙箱。它不能干扰其它应用程序,除非在它需要添加原有沙箱不能提供的功能时明确声明 权限 。这些权限请求能够被不同方式的操作所处理,特别的要基于证书和用户的提示被自动的允许或禁止。权限的请求在那个应用程序中通过一个应用程序被声明为静态的,所以在此之后在安装时或没有改变时它们会预先知道。 应用程序签名所有的 Android 应用程序(.apk 文件)必须通过一个证书的签名,此证书的私钥必须被开发者所掌握。这个证书的标识

3、是应用程序的作者。这个证书 不 需要通过证书组织的签署:Android 应用程序对于使用自签署的证书是完全允许的和特别的。这个证书仅仅被用于与应用程序建立信任关系,不是为了大规模的控制应用程序可否被安装。最重要的方面是通过确定能够访问原始签名权限和能够共享用户 ID 的签名来影响安全。用户标识和文件访问安装在设备中的每一个 Android 包文件(.apk) 都会被分配给一个属于自己的统一的 Linux 用户 ID,并且为它创建一个沙箱以防止影响其它应用程序(或者其它应用程序影响它)。用户 ID 在应用程序安装到设备中时被分配,并且在这个设备中保持它的永久性。 因为安全执行发生在进程级,所以一

4、些不同包中的代码在相同进程中不能正常的运行,自从他们需要以不同 Linux 用户身份运行时。你可以使用每一个包中的 AndroidManifest.xml 文件中的 manifest 标签属性 sharedUserId 拥有它们分配的相同用户 ID。通过这样做,两个包被视为相同的应用程序的安全问题被解决了,注意为了保持安全,仅有相同签名(和请求相同 sharedUserId 标签)的两个应用程序签名将会给相同的用户 ID。 应用创建的任何文件都会被赋予应用的用户标识,并且,正常情况下不能被其它包访问。当你通过 getSharedPreferences(String, int), openFil

5、eOutput(String, int) 或者 openOrCreateDatabase(String, int, SQLiteDatabase.CursorFactory)创建一个新文件时, 你可以同时或分别使用 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 标志允许其它包读/ 写此文件。当设置了这些标志时,这个文件仍然属于你的应用程序,但是它的全局读、写和读写权限已经设置所以其它任何应用程序可以看到它。权限命名一个基本的 Android 应用程序没有与其相关联的权限,意味着它不能做任何影响用户体验或设备中的数据的有害操作。要利用这个设备的保护特性,在

6、你的应用程序需要时,你必须在 AndroidManifest.xml 文件中包含一个或更多的 标签来声明此权限。 例如:需要监听来自 SMS 消息的应用程序将要指定如下内容:在安装应用程序时,通过包安装器应用程序要通过权限请求的许可,使建立在与应用程序签名的核对下声明对于用户的那些权限和影响。在应用运行期间对用户不做检查:它要么在安装时被授予特定的许可,并且使用想用的特性;要么不被授予许可,并且使得一切使用特性的尝试失败而不提示用户。 例如,sendBroadcast(Intent) 方法就是当数据被发送给到每个接收器时检查许可的,在方法调用返回之后,因此当许可失败时你不会收到一个异常。然而,

7、几乎在所有例子中,许可失败都会被打印到系统日志中。通常,多次的许可错误会产生抛回至应用程序的 SecurityException 异常。 Android 系统提供的许可可以在 Manifest.permission 中找到。每个引用也可以定义和 Enforce 它自己的许可,因此这不是全面的所有可能的列表。在程序操作期间,个别权限在一些地方可能被强制: 在系统接到呼叫的时候,预防一个应用程序去执行特定的函数。 在启动 Activity 时,防止一个应用启动其它应用程序的 Activities。 发送和接收 Intent 广播时,控制谁能接收你的广播或者谁能发送广播给你。 在一个内容提供器上访问

8、和操作时。 绑定或开始一个服务时。 权限的声明和支持为了执行你自己的权限,你必须首先在你的 AndroidManifest.xml 中使用一个或多个 标签声明它们。 例如,一个应用程序想用控制谁能启动一个 activities,它可以为声明一个做这个操作的许可,如下: 属性是必需的,告诉系统用户应如何处理应用程序接到请求此权限的通知,或者在这个文档中对这个权限的许可的描述。 属性是可选的,仅仅用于帮助系统为用户显示权限。通常,你要设置这些,向一个标准的系统组(列在android.Manifest.permission_group 中),或者在更多的情况下要自定义。它更偏向于使用一个已经存在的组

9、,做为简化的权限用户界面显示给用户。 注意:应该为每个权限提供标签(label) 和描述(description)。当用户浏览权限列表时,它们可以为用户展示字符资源,如(android:label) 或者一个许可的详细信息 ( android:description) 。标签(label) 比较短,用几个词来描述该权限保护的关键功能。描述(description) 应该是一组句子,用于描述获得权限的用户可以做什么。我们写描述的习惯是两句话,第一句声明权限,第二句警告用户如果应用许可该权限时,会发生什么不好的事情。 下面是一个 CALL_PHONE 权限的标签和描述的例子: directly c

10、all phone numbersAllows the application to callphone numbers without your intervention. Malicious applications maycause unexpected calls on your phone bill. Note that this does notallow the application to call emergency numbers.你可以在系统中通过 shell 命令 adb shell pm list permissions 查看权限当前定义。特别,-s 操作以简单粗略的

11、方式为使用者显示权限: $ adb shell pm list permissions -s All Permissions:Network communication: view Wi-Fi state, create Bluetooth connections, fullInternet access, view network stateYour location: access extra location provider commands, fine (GPS) location,mock location sources for testing, coarse (network-

12、based) locationServices that cost you money: send SMS messages, directly call phone numbers.在 AndroidManifest.xml 文件中支持权限通过 AndroidManifest.xml 文件可以设置高级权限,以限制访问系统的所有组件或者使用应用程序。所有的这些请求都包含在你所需要的组件中的 android:permission 属性,命名这个权限可以控制访问此组件。 Activity 权限 (使用 标签) 限制能够启动与 Activity 权限相关联的组件或应用程序。此权限在 Context.

13、startActivity() 和 Activity.startActivityForResult() 期间要经过检查;如果调用者没有请求权限,那么会为调用抛出一个安全异常( SecurityException )。 Service 权限( 应用 标签)限制启动、绑定或启动和绑定关联服务的组件或应用程序。此权限在 Context.startService(), Context.stopService() 和 Context.bindService() 期间要经过检查;如果调用者没有请求权限,那么会为调用抛出一个安全异常( SecurityException )。 BroadcastReceiv

14、er 权限 (应用 标签)限制能够为相关联的接收者发送广播的组件或应用程序。在 Context.sendBroadcast() 返回后此权限将被检查,同时系统设法将广播递送至相关接收者。因此,权限失败将会导致抛回给调用者一个异常;它将不能递送到目的地。在相同方式下,可以使 Context.registerReceiver() 支持一个权限,使其控制能够递送广播至已登记节目接收者的组件或应用程序。其它的,当调用 Context.sendBroadcast() 以限制能够被允许接收广播的广播接收者对象一个权限(见下文)。 ContentProvider 权限(使用 标签)用于限制能够访问 Cont

15、entProvider 中的数据的组件或应用程序。(Content providers 有一个重要的附加安全设施可用于它们调用被描述后的 URI 权限。 ) 不同于其它组件,它有两个不相连系的权限属性要设置:android:readPermission 用于限制能够读取提供器的组件或应用程序, android:writePermission 用于限制能够写入提供器的组件或应用程序。注意,如果一个提供者的读写权限受保护,意思是你只能从提供器中读,而没有写权限。当你首次收回提供者(如果你没有任何权限,将会抛出一个 SecurityException 异常),那么权限要被检查,并且做为你在这个提供者

16、上的执行操作。 使用 ContentResolver.query() 请求获取读权限; 使用 ContentResolver.insert(), ContentResolver.update() 和 ContentResolver.delete() 请求获取写权限。在所有这些情况下,一个SecurityException 异常从一个调用者那里抛出时不会存储请求权限结果。 发送广播时支持权限当发送一个广播时你能总指定一个请求权限,此权限除了权限执行外,其它能发送 Intent 到一个已注册的 BroadcastReceiver 的权限均可以。 通过调用 Context.sendBroadcast

17、() 及一些权限字符串, 为了接收你的广播,你请求一个接收器应用程序必须持有那个权限。 注意,接收者和广播者都能够请求一个权限。当这样的事发生了,对于 Intent来说,这两个权限检查都必须通过,为了交付到共同的目的地。 其它权限支持任意一个好的粒度权限都能够在一些调用者的一个服务中被执行。 和 Context.checkCallingPermission() method. 方法一起被完成。调用并产生一个需要的权限字符串,它将返回一个整型,以确定当前调用进程是否被许可。注意,仅仅当你执行的调用进入到其它进程的时候这些才会被使用,通常,通过IDL 接口从一个服务发布,或从一些其它方式通知其它进

18、程。 这有许多其它有益的方式去检查权限。如果你有一个其它进程的 PID,你可以使用上下文的方法 Context.checkPermission(String, int, int) 检查权限违反PID。 如果你有一个其它应用程序的包名, 你可以使用直接的包管理器方法 PackageManager.checkPermission(String, String) 去查看特定的包是否被指定的权限所许可。URI 权限迄今为止,在与内容提供器共同使用时,标准权限系统描述通常是不充分的。一个内容提供器要保护它自己及读和写权限,当为了它们产生作用,它的直接客户端总是需要手动的对其它应用程序指定 URI。一个典

19、型的例子是邮件应用程序中的附件。访问邮件的权限应该被保护,因为这是敏感用户数据。可以,如果一个网址图片附件提供给一个图片查看器,那个图片查看器将没有权限打开这个附件,因为它没有原因去拥有一个权限从而不能访问所有的电子邮件。对于这个问题的解决是通过网址权限:当开始一个活动或对一个活动返回一个结果,调用者可通过设置 Intent.FLAG_GRANT_READ_URI_PERMISSION 和 Intent.FLAG_GRANT_WRITE_URI_PERMISSION 中的一个或者两个。允许接收活动权限访问在 Intent 中特定的数据地址,不论它有权限访问数据在内容提供器相应的 Intent

20、中。这种机制允许一个公用的功能性模型使用户相互交互(打开一个附件,从一个列表中选择一个联系人,等等)驱动 ad-hoc 在优粒度权限的许可下。这可能是一个主要设备,应用程序为了减少这个权限而需要,仅仅直接关系到它们的行为。这优粒度 URI 权限的许可工作,然而,请求一些协作和内容提供者保持那些URI。强烈推荐内容提供者实现这种设备,并且通过android:grantUriPermissions 属性或者 标签声明支持它。 更多信息可以在 Context.grantUriPermission(), Context.revokeUriPermission(), 和 Context.checkUriPermission() 方法中找到。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报