Android - ContentProvider - 自定义权限

时间:2015-06-22 17:14:36

标签: android permissions

我的内容提供商和自定义权限存在问题。

  1. 假设App A有一个包含精彩信息的内容提供者。这些信息有点干扰,这就是为什么最好有权阅读它们。

  2. 我们假设App B是第三方应用程序,并且想要访问A的内容提供商。

  3. 我们假设读取内容提供者的权限是“com.custom.a.readpermission”。

  4. 在清单中,有:

    <permission android:name="com.custom.a.readpermission"/>
    
    <provider android:name="com.a.provider.MyProvider"
              android:exported="true"
              android:authorities="com.a.provider.MyProvider"
              android:readPermission="com.custom.a.readpermission"/>
    
  5. 在B清单中,有:

    <uses-permission android:name="com.custom.a.readpermission"/>
    
  6. 所以,现在,如果我安装A;之后,我安装B. B可以访问数据。

    但是,如果我在A之前安装B,我会得到:

    java.lang.SecurityException: Permission Denial: opening provider com.a.provider.MyProvider requires com.custom.a.readpermission
    

    那么,在这种情况下如何管理自定义权限?

1 个答案:

答案 0 :(得分:0)

  

那么,在这种情况下如何管理自定义权限?

您的主要选择是:

  1. 使用内置系统权限,而不是自定义权限。如果敏感数据的性质与已经由内置权限保护的其他数据相似,这通常是一个好主意。

  2. 抓住此异常并告诉用户他们需要卸载A和B并按正确的顺序安装它们。

  3. 如果A和B都是同一作者,请使用protectionLevel signature权限,并在A和B中使用相同的<permission>元素。然后安装顺序无关紧要,用户不会被提示同意此许可。

  4. 但是,请记住,在Android 5.0之前,选项#3的工作意味着在A可以执行与B相同的操作之前安装的任何应用程序,除了降级{{1从protectionLevelsignature。这是a known vulnerability。 Android 5.0要求自定义权限是在“获胜的第一个”基础上定义的,尝试定义相同normal的第二个和后续应用程序必须使用与实际定义的应用程序相同的签名密钥进行签名它

    事实上,权限非常适合预安装的应用和操作系统本身,但在应用级别定义自定义权限不是很好。