第1页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共8页Android的安全与权限Android是一个多进程系统,每一个应用程序(和系统的组成部分)都运行在自己的进程中。在应用程序和系统间的安全通过标准的Linux设备在进程级被执行,例如被分配给应用程序的用户和组ID。额外的细粒度安全特性通过“许可”机制来提供,该机制能够对一个指定进程可实现的特定操作进行约束。内容安全结构应用程序签名用户标识和文件访问权限命名权限的声明和支持在AndroidManifest.xml文件中支持权限发送广播时支持权限其它权限的支持URI权限安全结构Android安全学中的一个重要的设计点是在默认情况下应用程序没有权限执行对其它应用程序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据(例如联系方式或e-mail),读/写其它应用程序的文件,执行网络访问,保持设备活动,等等。应用程序的进程是一个安全的沙箱。它不能干扰其它应用程序,除非在它需要添加原有沙箱不能提供的功能时明确声明权限。这些权限请求能够被不同方式的操作所处理,特别的要基于证书和用户的提示被自动的允许或禁止。权限的请求在那个应用程序中通过一个应用程序被声明为静态的,所以在此之后在安装时或没有改变时它们会预先知道。应用程序签名第2页共8页第1页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共8页所有的Android应用程序(.apk文件)必须通过一个证书的签名,此证书的私钥必须被开发者所掌握。这个证书的标识是应用程序的作者。这个证书不需要通过证书组织的签署:Android应用程序对于使用自签署的证书是完全允许的和特别的。这个证书仅仅被用于与应用程序建立信任关系,不是为了大规模的控制应用程序可否被安装。最重要的方面是通过确定能够访问原始签名权限和能够共享用户ID的签名来影响安全。用户标识和文件访问安装在设备中的每一个Android包文件(.apk)都会被分配给一个属于自己的统一的Linux用户ID,并且为它创建一个沙箱以防止影响其它应用程序(或者其它应用程序影响它)。用户ID在应用程序安装到设备中时被分配,并且在这个设备中保持它的永久性。因为安全执行发生在进程级,所以一些不同包中的代码在相同进程中不能正常的运行,自从他们需要以不同Linux用户身份运行时。你可以使用每一个包中的AndroidManifest.xml文件中的manifest标签属性sharedUserId拥有它们分配的相同用户ID。通过这样做,两个包被视为相同的应用程序的安全问题被解决了,注意为了保持安全,仅有相同签名(和请求相同sharedUserId标签)的两个应用程序签名将会给相同的用户ID。应用创建的任何文件都会被赋予应用的用户标识,并且,正常情况下不能被其它包访问。当你通过getSharedPreferences(String,int),openFileOutput(String,int)或者openOrCreateDatabase(String,int,SQLiteDatabase.CursorFactory)创建一个新文件时,你可以同时或分别使用MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE标志允许其它包读/写此文件。当设置了这些标志时,这个文件仍然属于你的应用程序,但是它的全局读、写和读写权限已经设置所以其它任何应用程序可以看到它。权限命名一个基本的Android应用程序没有与其相关联的权限,意味着它不能做任何影响用户体验或设备中的数据的有害操作。要利用这个设备的保护特性,在你的应用程序需要时,你必须在AndroidManifest.xml文件中包含一个或更多的标签来声明此权限。例如:需要监听来自SMS消息的应用程序将要指定如下内容:第3页共8页第2页共8页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共8页在安装应用程序时,通过包安装器应用程序要通过权限请求的许可,使建立在与应用程序签名的核对下声明对于用户的那些权限和影响。在应用运行期间对用户不做检查:它要么在安装时被授予特定的许可,并且使用想用的特性;要么...