【发布时间】:2011-05-25 05:46:38
【问题描述】:
我们如何确保某些应用程序无法访问我存储在内容提供程序中的数据,而某些其他应用程序可以访问这些数据?基本上我需要允许一些我感兴趣的应用程序访问我存储在 Content Provider 中的数据,但我不希望所有应用程序都能够访问该数据。我怎样才能做到这一点?
谢谢。
【问题讨论】:
标签: android android-contentprovider
我们如何确保某些应用程序无法访问我存储在内容提供程序中的数据,而某些其他应用程序可以访问这些数据?基本上我需要允许一些我感兴趣的应用程序访问我存储在 Content Provider 中的数据,但我不希望所有应用程序都能够访问该数据。我怎样才能做到这一点?
谢谢。
【问题讨论】:
标签: android android-contentprovider
最简单的方法是使用您定义的权限来保护内容提供者。将其作为签名作为权限,这样只有使用您的证书签名的应用才能获得它。
见:
http://developer.android.com/guide/topics/security/security.html
http://developer.android.com/reference/android/R.styleable.html#AndroidManifestProvider
http://developer.android.com/guide/topics/manifest/provider-element.html
如果根据证书执行此操作还不够,您需要自己编写权限检查。这是通过调用 Binder.getCallingUid() 来完成对应用程序的传入调用,并确定给定的 uid 是否有权访问您的提供程序。但是,实际上实施一个实际上是安全的不同策略需要大量仔细的思考和设计。
【讨论】:
在 AndroidManifest.xml 中,在带有 ContentProvider 属性的屏幕上,您有两个字段:
读取权限 写权限
因此,您可以定义安全字符串(也可能是某个文件的路径),这些字符串是访问您的 ContentProvider 的权限。
想要访问您的内容提供者的应用程序必须在其 UsesPermission 元素中添加该应用程序。
【讨论】: