Android是一个多进程系统,每一个应用程序都运行在自己的进程中。在应用程序和系统间的安全通过标准的Linux设备在进程级被执行,例如被分配给应用程序的用户和组ID。
安全结构
Android安全学是在默认情况下应用程序没有权限执行对其它应用程序、操作系统或用户有害的操作。这些操作包括读/写用户的隐私数据,读/写其它应用程序的文件,执行网络访问,保持设备活动,等等。
每个应用程序运行在独立的沙箱中,不能干扰其他应用程序或操作系统。这意味着应用程序只能访问自己的数据和资源,除非明确声明权限。Android应用程序需要声明权限来执行敏感操作,如读取用户隐私数据、访问网络等。权限请求可以通过证书和用户提示来自动允许或禁止。
应用程序签名
所有Android应用程序必须通过证书签名,这个证书由开发者掌握。签名用于建立应用程序与设备之间的信任关系,而不是控制应用程序的安装。。最重要的方面是通过确定能够访问原始签名权限和能够共享用户ID的签名来影响安全。
用户标识和文件访问
每个安装在设备上的Android应用程序都被分配一个唯一的用户ID,并为其创建一个沙箱。这样可以防止不同应用程序之间的干扰。通过使用相同的sharedUserId属性,可以将不同包中的代码视为同一个应用程序,从而解决安全问题 。并且在这个设备中保持它的永久性。
因为安全执行发生在进程级,所以一些不同包中的代码在相同进程中不能正常的运行,他们需要以不同用户身份运行时。你可以使用每一个包中的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文件中包含一个或更多的 标签来声明此权限。
在安装应用程序时,通过包安装器应用程序要通过权限请求的许可,使建立在与应用程序签名的核对下声明对于用户的那些权限和影响。在应用运行期间对用户不做检查:它要么在安装时被授予特定的许可,并且使用想用的特性;要么不被授予许可,并且使得一切使用特性的尝试失败而不提示用户。
例如,sendBroadcast(Intent) 方法就是当数据被发送给到每个接收器时检查许可的,在方法调用返回之后,因此当许可失败时你不会收到一个异常。然而,几乎在所有例子中,许可失败都会被打印到系统日志中。通常,多次的许可错误会产生抛回至应用程序的SecurityException异常。
标签:
安全架构
本文转载自: https://blog.csdn.net/A1523901706/article/details/136675195
版权归原作者 MarioHoH 所有, 如有侵权,请联系我们删除。
版权归原作者 MarioHoH 所有, 如有侵权,请联系我们删除。