Как ограничить данные поставщика контента в приложениях

Как мы можем гарантировать, что некоторые приложения не смогут получить доступ к моим данным, хранящимся в поставщике контента, где в некоторых других приложениях можно получить доступ к этому? В принципе, мне нужно разрешить некоторое применение моего интереса для доступа к моим данным, хранящимся в 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.