Как ограничить данные поставщика контента в приложениях
Как мы можем гарантировать, что некоторые приложения не смогут получить доступ к моим данным, хранящимся в поставщике контента, где в некоторых других приложениях можно получить доступ к этому? В принципе, мне нужно разрешить некоторое применение моего интереса для доступа к моим данным, хранящимся в Content Provider, но я не хочу, чтобы все приложения могли получать доступ к этим данным. Как я могу достичь этого?
Спасибо.
Ответы
Ответ 1
Самый простой способ - защитить поставщика контента с помощью разрешения, которое вы определяете. Сделайте это подписями, чтобы разрешить доступ только к приложениям, подписанным с вашим сертификатом.
См:
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 доступ к вашему провайдеру. Фактически реализация другой политики, которая действительно защищена, требует много тщательной мысли и дизайна.
Ответ 2
В AndroidManifest.xml на экране со свойствами вашего ContentProvider у вас есть два поля:
Разрешение на чтение
WritePermission
Таким образом, вы можете определить безопасные строки (также может быть путь к некоторому файлу), которые являются разрешениями для доступа к вашему ContentProvider.
Приложения, которые хотят получить доступ к вашему провайдеру контента, должны иметь те, которые добавлены в их элементы UsesPermission.