Android 内置的应用程序安全性?

信息安全 安卓
2021-08-16 19:00:20

每当您访问 Google 的 Play 商店并安装应用程序时,都会显示所有必要访问权限的列表,并且需要确认才能继续安装。

假设我想安装愤怒的小鸟:

  • 应用内购买
  • 身份
  • 照片/媒体/文件
  • Wifi 连接信息
  • 设备 ID 和通话信息

Play Store 究竟是如何附带此列表的?

  • 他们的算法是否真的分析了代码以得出该列表?
  • 供应商是否负责列出所需的访问权限?
  • 不一样的方式?
2个回答

每个权限都需要在 AndriodManifest.xml 中声明,然后应用才能使用它们。例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app.myapp" >
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    ...
</manifest>

能够接收短信。

此清单还将用于列出您在商店中下载应用程序时显示的权限。

Android 的安全模型是所有受保护的资源(身份、联系人、相机、GPS 等,[您可以在此处请求的完整权限列表])在操作系统 API 内受到保护。这意味着应用程序无法直接访问硬件,而是必须要求操作系统与硬件进行对话。这样,操作系统就有机会检查应用程序的权限并拒绝提供数据。

一个例子:

假设我编写了一个想要访问 GPS 位置的应用程序,我必须做两件事:

  1. 在安装时,在清单文件中请求适当的权限manifest.xml

    <manifest ... > <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ... </manifest>

  2. 在运行时,让操作系统给我 GPS 位置:

    String locationProvider = LocationManager.GPS_PROVIDER; Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

在调用.getLastKnownLocation(...)操作系统期间将检查我的应用程序是否具有ACCESS_FINE_LOCATION权限。如果是,那么它将把位置数据还给我,如果不是,它会抛出一个java.lang.SecurityException并拒绝给我任何数据。