Undeclared Permissions
未声明的权限
描述
应用程序可以通过定义其他应用可以请求的权限,将其功能公开给这些应用。
要执行您自己的权限,必须首先在 AndroidManifest.xml 中使用 <permission> 元素声明它,然后再使用 android:permission= 将其应用于您的组件。
如果应用程序未声明就应用了某项权限,恶意应用程序可能会以 normal 保护级别声明该权限,请求该权限并调用您应用程序的受保护组件。
此外,未声明的权限可能是一种安全风险,因为用户可能不知道应用程序正在访问敏感数据或系统资源。这可能会导致隐私侵犯或其他安全问题,例如应用程序在未经用户同意的情况下访问用户的位置。
建议
在您的应用程序中声明权限之前,请首先考虑您是否需要该权限,或者是否有其他方法可以支持您的应用程序中的该功能。
- 在清单文件中声明权限:
在将权限应用于任何组件之前,请确保已使用 <permission> 元素对其进行声明。
例如,一个想要控制谁可以启动其某个活动的应用程序可以如下声明此操作的权限:
- 步骤 1:我声明了一个名为
com.example.myapp.permission.DEADLY_ACTIVITY的权限并填写必要的属性 - 步骤 2:我在我的活动上应用
com.example.myapp.permission.DEADLY_ACTIVITY权限
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<permission
android:name="com.example.myapp.permission.DEADLY_ACTIVITY"
android:label="@string/permlab_deadlyActivity"
android:description="@string/permdesc_deadlyActivity"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="dangerous"/>
...
<activity android:exported="true" android:name="com.important.PushActivity"
android:permission="com.example.myapp.permission.DEADLY_ACTIVITY"/>
</manifest>
-
仅使用您的应用程序功能所需的最少权限集。这可以通过审查您应用程序的代码并识别应用程序正常运行所需的特定资源或数据来实现。 对于您的应用程序请求的每一项权限,请确保它能为用户提供明显的好处,并且请求以对他们来说显而易见的方式进行。
-
使用Android Studio中的lint检查来检测和防止未声明的权限。Lint是Android Studio中内置的工具,它分析应用程序的代码和资源以识别潜在问题,包括未声明的权限。在Android Studio中,可以通过选择“Analyze”->“Run Inspection by Name”->“Missing Permissions”来运行Lint。
-
使用APK Analyzer等工具分析应用程序权限。APK Analyzer是Android Studio中内置的工具,允许开发人员检查APK文件的内容,包括其权限、活动、服务和其他组件。开发人员还可以使用Appium、Selendroid和Robotium等以安全为重点的测试框架来检测和防止安全漏洞,包括未声明的权限。
-
考虑应用程序的依赖项:当您包含一个库时,您也会继承它的权限要求。请注意每个依赖项需要哪些权限以及这些权限用于什么目的。
链接
标准
- OWASP_MASVS_L1:
- MSTG_PLATFORM_4
- OWASP_MASVS_L2:
- MSTG_PLATFORM_4
- CWE_TOP_25:
- CWE_276
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_7_3
- REQ_11_3
- OWASP_MASVS_v2_1:
- MASVS_PRIVACY_4
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_6_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5