【问题标题】:Android IPC and ContentProvider differencesAndroid IPC 和 ContentProvider 的区别
【发布时间】:2011-09-25 22:12:42
【问题描述】:

我正在尝试确定将手机上存储的加密内容暴露给第三方应用的最佳方法。内容很敏感,需要受到保护,因此只有某些应用程序可以访问它。我正在研究的方法是 IPC 和 Content Provider。以下是我认为对于我的情况来说两者的优点和缺点。

IPC - 专业版

  • 对客户端的灵活响应类型。可以返回不同的错误代码和受限访问级别

IPC - 骗局

  • 比 Content Provider 实现起来更复杂

  • 必须编写自己的方式来保护对内容的访问。

内容提供者 - 专业人士

  • 易于实施

  • 通过提供提供者定义权限轻松保护访问:protectionLevel=signature

内容提供者 - 骗局

  • 为确保访问安全,内容提供者的密钥签名必须与不理想的第 3 方应用共享。

  • 返回结果类型的灵活性有限。 Content Provider 只为查询的列返回一个 Cursor 对象。


性能和电池有什么主要区别吗?
可以异步执行吗?
列表中还有其他 cmets/建议吗?

【问题讨论】:

    标签: android ipc android-contentprovider


    【解决方案1】:

    通过设置提供者定义权限来轻松保护访问:protectionLevel=signature

    仅当您是唯一使用内容提供商的公司时才有效。

    为了确保访问安全,内容提供者的密钥签名必须与不理想的第 3 方应用共享。

    我更愿意将其描述为“可能符合‘精神错乱’的医学定义”。您的第三方将能够修改您的“安全”数据、伪造您发布的应用程序、将您的签名密钥泄露给恶意软件作者等。

    Content Provider 只为查询的列返回一个 Cursor 对象。

    除了或代替基于Cursor 的内容提供程序API,您还可以使用基于文件的内容提供程序API。请参阅ContentResolver 上的openInputStream() 等方法。

    性能和电池有什么大的不同吗?

    不是特别。

    可以异步执行吗?

    两者都可以,虽然我个人觉得服务更容易一些。

    列表中还有其他的 cmets/建议吗?

    权限同样适用于服务和内容提供商,但我想再次强调,您不应该与第三方共享您的签名密钥,除非可能是在枪口下。

    【讨论】:

    • 感谢您的 cmets commonsware!
    • 也许我应该在单独的问题中提出,但是,我应该考虑另一种选择来公开我的内容吗?我可以改用简单的基于意图的通信形式吗?如果是这样,我该怎么做?这种技术有什么优点/缺点?
    • @Dom:是的,您可以让服务通过onStartCommand() 接收命令,并通过Messenger 或命令上的Intent 额外发送结果。它不会改变安全特性。
    【解决方案2】:

    我无法回答您的全部问题,但我可以解决密钥共享部分。 您的 APK 使用您的公钥/私钥对的公共部分进行签名。可以将您的公钥附加到另一个应用程序以伪装成您的应用程序,但需要有人拥有您的私钥才能使用您的公钥以您的名义上传应用程序。

    公钥证书,也称为数字证书或 身份证书,包含公钥/私钥的公钥 对,以及标识密钥所有者的其他一些元数据 (例如,名称和位置)。证书持有人持有 对应的私钥。

    当您对 APK 进行签名时,签名工具会将公钥证书附加到 APK。公钥证书用作 将 APK 唯一地关联到您和您的“指纹” 对应的私钥。这有助于 Android 确保任何未来 对您的 APK 的更新是真实的,并且来自原作者。

    (来自https://developer.android.com/studio/publish/app-signing.html

    此外,我的理解是其他应用程序与您的应用程序共享其密钥,而不是相反。如果您可以使用其他设置之一,则也不需要签名级别保护。根据https://developer.android.com/guide/topics/manifest/permission-element.html#plevel,您可以选择将应用程序设置为 4 种不同保护级别之一。大多数应用程序不包含足够敏感的数据,因此需要“危险”设置,因此正常可能适用于大多数应用程序。

    此外,您的应用程序的签名(公钥)已经通过 PackageManager 类中可用的方法公开。我广泛查看了 Android 开发人员页面,并阅读了另一篇文章的一个非常有用的答案以找到此内容。看来任何应用都可以通过 CommonsWare 的 Android content provider protection level & different keys 此处描述的方法获取您应用的公钥。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2015-12-17
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多