在Android应用程序中动态检查权限

时间:2013-08-26 00:11:47

标签: android permissions android-manifest android-permissions

在运行时跟踪我之前关于Android权限执行的question,我发现Android中有许多不同的方法,应用程序可以验证调用(客户端)应用程序拥有的权限。这包括checkCallingPermission,checkCallingOrSelfPermission,checkCallingUriPermission,checkCallingOrSelfUriPermission,checkPermission,checkUriPermission等调用。据我所知android documentation,我只能在运行时找到与权限检查相关的调用。我的问题:

  • 还有其他方法(而不是使用上述电话) 动态检查调用者的权限?如果有的话 此类电话,请提供信息/链接或列出它们。
  • checkCallingOrSelfPermission的说明
  

如果您当前没有处理,则它会授予您自己的权限   IPC。与关怀一起使用!

这似乎有风险,因为它可以促进对调用进程的(危险)权限的委派,这可能导致权限提升(如果不小心使用)。请告诉我,我是否说这可能会导致特权升级攻击。

  • 我无法理解为什么一个进程(正在运行的应用程序)会检查是否拥有某些权限(它很清楚它有权做什么?)。请让我知道 这种特殊方法的设计背后的直觉: checkCallingOrSelfPermission。 (简单地说,为什么/何时需要 checkCallingOrSelfPermission?)

1 个答案:

答案 0 :(得分:3)

Android中有两种类型的权限检查机制。

一个是每个进程的运行时动态检查,另一个是每个包的静态检查。你提到的是关于运行时动态的东西都在Context中实现,另一个版本在PackageManager中。 - checkPermission

您想要检查特定包是否具有特定权限,checkPermission就是答案。有关此主题的更多详细说明,请参阅Android开发者网站上的一篇文章。 - http://developer.android.com/guide/topics/security/permissions.html#declaring

在许多情况下,您不需要使用动态权限检查方法,只有当您使用一个提供程序将某些私有文件共享到特定客户端,远程服务或某些小部件时才需要它 - 通过某些相关的临时权限授予系统意图或IPC。

而且,关于multiple permissions in android:permisson的上一个问题还有其他一些问题。有一种方法可以在Manifest中定义权限列表。

入住 http://developer.android.com/guide/topics/manifest/uses-permission-element.html