应用程序的自定义权限

Posted

技术标签:

【中文标题】应用程序的自定义权限【英文标题】:Custom permission for application 【发布时间】:2014-12-17 16:17:03 【问题描述】:

我最近在阅读有关我们在 android 中的的信息。

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

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

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

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

这意味着我的应用程序可能拥有这种可能的权限。

并在我的活动标签中使用它来强制执行该权限,如下所示:

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

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

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

SecurityException: Missing permission: my.pkg.CUST_PER

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

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

【问题讨论】:

只是想指出这个漏洞:commonsware.com/blog/2014/02/12/… 【参考方案1】:

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

&lt;uses-permission&gt; 表示您的应用希望拥有&lt;uses-permission&gt; 元素中指定的权限。该权限所保护的内容取决于其他开发人员。在某些情况下,它可能会保护某些允许您“访问某些用户数据或设备功能”的东西。

这意味着我的应用程序可能拥有这种可能的权限。

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

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

更准确地说,只有带有 &lt;uses-permission&gt; 元素的应用才有资格访问受保护的组件。此外,正如 Orlowski 先生所指出的,&lt;permission&gt;protectionLevel 表示是否涉及用户接受(protectinoLevelnormaldangerous),如果应用程序需要通过相同的签名进行签名密钥作为使用权限保护自己的应用程序(signatureprotectionLevel),或者如果需要将应用程序安装在/system 分区上(systemprotectionLevel)。

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

正确。

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

不是特别。

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

首先不要暴露它。拥有android:permission 背后的完整和完整的是因为您希望其他应用能够访问数据,前提是用户接受、签名匹配等。如果您不希望其他应用程序访问数据,请不要导出组件。对于活动、服务和清单注册的接收者,这通常是通过没有&lt;intent-filter&gt; 来完成的。对于&lt;provider&gt; 元素,您需要手动将android:exported 属性设置为false

【讨论】:

【参考方案2】:

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

您应该阅读 whole 文档,因为 android:protectionLevel 的存在正是为了解决这个问题,并在此处进行了解释:

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

【讨论】:

以上是关于应用程序的自定义权限的主要内容,如果未能解决你的问题,请参考以下文章

spring @Preauthorize 中的自定义方法

Spring MVC 中的自定义授权

Azure 门户的自定义身份验证

具有隐含意图的自定义权限

Android 自定义权限 - Marshmallow

django的自定义权限