自定义应用程序权限

时间:2014-12-17 16:17:03

标签: android permissions

我最近正在阅读有关Android应用程序的自定义权限。

uses-permission很清楚。它包含您的应用程序访问某些用户数据或设备功能所需的权限,以及正常运行。

现在,我们来到permission元素。它声明了活动或服务可能需要其他应用程序保留的权限才能使用您的应用程序的数据或逻辑

现在,假设我在应用程序的清单文件中使用权限标记,例如:

<permission android:name="my.pkg.CUST_PER"/>

这意味着我的申请可能有这种可能的许可。

并在我的Activity标记中使用它强制执行该权限:

<activity
    android:name=".MyApp"
    android:permission="my.pkg.CUST_PER">

现在,根据我的理解,只有请求我指定权限的应用程序才能访问我的应用程序的安全组件。

如果其他应用尝试在没有我的自定义权限的情况下访问这些组件,会发生什么?我认为它应该崩溃,并且会在logcat中看到:

SecurityException: Missing permission: my.pkg.CUST_PER

如果是,那不是安全漏洞吗?

如何在这种情况下保护应用程序数据?

2 个答案:

答案 0 :(得分:4)

  

使用权限很明确。它包含您的应用程序访问某些用户数据或设备功能所需的权限,以及正常运行。

<uses-permission>表示您的应用希望保留<uses-permission>元素中指定的权限。该权限所捍卫的是由其他开发人员决定的。在某些情况下,它可能会保护一些允许您“访问某些用户数据或设备功能”的内容。

  

这意味着我的申请可能有这种可能的许可。

不,它没有。它只是定义了一个新的权限。它并未声明您的应用或任何其他应用与权限有任何其他关系。

  

现在,根据我的理解,只有请求我指定权限的应用程序才能访问我的应用程序的安全组件。

更准确地说,只有具有<uses-permission>元素的应用才有资格访问受保护的组件。此外,正如Orlowski先生所指出的,protectionLevel的{​​{1}}表示是否涉及用户接受(<permission> protectinoLevelnormal),如果应用程序需要使用与使用权限(dangerous protectionLevel)进行自我辩护的应用程序相同的签名密钥进行签名,或者是否需要在{{1}上安装应用程序}分区(signature的{​​{1}}。

  

如果其他应用尝试在没有我的自定义权限的情况下访问这些组件,会发生什么?我认为它应该崩溃,并且会在logcat中看到:需要此权限:my.pkg.CUST_PER

正确。

  

如果是,那不是安全漏洞吗?

不是特别。

  

如何在这种情况下保护应用程序数据?

首先不要暴露它。 完整且整个 背后有/system,因为您希望其他应用可以访问数据,但需要用户接受,签名匹配等。如果您不希望其他应用程序访问数据,请不要导出该组件。对于活动,服务和清单注册的接收者,这通常是通过没有protectionLevel来实现的。对于system元素,您需要手动将android:permission属性设置为<intent-filter>

答案 1 :(得分:1)

  

如何在这种情况下保护应用程序数据?

您应该阅读整个文档,因为android:protectionLevel完全存在以解决此问题,并在此处进行说明:

https://developer.android.com/guide/topics/manifest/permission-element.html#plevel