Как ограничить данные поставщика контента между приложениями - PullRequest
15 голосов
/ 25 мая 2011

Как мы можем гарантировать, что определенные приложения не смогут получить доступ к моим данным, хранящимся в поставщике контента, где в некоторых других приложениях есть доступ к этому? По сути, мне нужно разрешить некоторым интересующим меня приложениям получать доступ к моим данным, хранящимся в Content Provider, но я не хочу, чтобы все приложения имели доступ к этим данным. Как мне этого добиться?

Спасибо.

Ответы [ 2 ]

18 голосов
/ 25 мая 2011

Самый простой способ - защитить провайдера контента с помощью заданного вами разрешения. Сделайте подпись разрешением, чтобы его могли получать только приложения, подписанные вашим сертификатом.

См:

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 разрешение на доступ к вашему провайдеру. На самом деле реализация другой политики, которая на самом деле безопасна, требует много тщательного обдумывания и разработки.

4 голосов
/ 25 мая 2011

В AndroidManifest.xml на экране со свойствами вашего ContentProvider у вас есть два поля:

Разрешение на чтение WritePermission

Итак, вы можете определить безопасные строки (также это можетпуть к какому-либо файлу), которые являются разрешениями для доступа к вашему ContentProvider.

Приложения, которые хотят получить доступ к вашему контент-провайдеру, должны иметь добавленные в свои элементы UsesPermission.

...