Указан небезопасный путь к Content Provider
Описание
Что такое Content Provider?
Как следует из названия, Content Provider, отвечает за предоставление данных и управление доступом к ним. Эти данные могут храниться в файловой системе, в базе данных SQLite или в любом другом постоянном хранилище, доступном из вашего приложения. С помощью Content Provider любое приложение с соответствующими разрешениями может читать или даже изменять данные, используя стандартный набор API, который позволяет выполнять необходимые транзакции.
Для защиты чувствительных данных Content Provider имеет ряд атрибутов, см. ниже.
| Атрибут | Описание |
|---|---|
android:permission |
Указывается разрешение, которое требуется для доступа к данным Content Provider |
android:readPermission |
Указывается разрешение, которое требуется для чтения данных Content Provider |
android:writePermission |
Указывается разрешение, которое требуется для записи данных Content Provider |
<grant-uri-permissionandroid:path="string"android:pathPattern="string"android:pathPrefix="string"/> |
Указывает подмножества данных приложения, к которым у Content Provider есть разрешение на доступ |
<path-permissionandroid:path="string"android:pathPrefix="string"android:pathPattern="string"android:permission="string"android:readPermission="string"android:writePermission="string"/> |
Определяет путь и необходимые разрешения для определенного подмножества данных внутри Content Provider. Этот элемент можно указать несколько раз, чтобы указать несколько путей |
У элементов <grant-uri-permission и <path-permission есть атрибуты android:path, android:pathPrefix и android:pathPattern.
| Атрибут | Описание |
|---|---|
android:path |
Полный путь URI для подмножества данных Content Provider. Разрешение может быть предоставлено только конкретным данным, указанным по этому пути. При использовании для предоставления содержимого поисковых предложений к нему добавляется/search_suggest_query |
android:pathPrefix |
Начальная часть пути URI для подмножества данных Content Provider. Разрешение может быть предоставлено всем подмножествам данных с путями, которые разделяют эту начальную часть |
android:pathPattern |
Полный путь URI для подмножества данных Content Provider, но который может использовать wildcards. |
Необходимо внимательно проверять указанные значения данных атрибутов.
Проблема
Если значения атрибутов android:path, android:pathPrefix и android:pathPattern равны "/" или ".*" — ContentProvider разрешит доступ ко всем своим данным.
Рекомендации
При использовании атрибутов android:path, android:pathPrefix и android:pathPattern у ContentProvider необходимо избегать указания значений в виде: "/" или ".*".
| Плохо | Хорошо |
|---|---|
<grant-uri-permission android:path="/"/><grant-uri-permission android:pathPrefix="/"/><grant-uri-permission android:pathPattern=".*"/> |
<grant-uri-permission android:path="/all_downloads"/><grant-uri-permission android:pathPrefix="/all_downloads"/><grant-uri-permission android:pathPattern="/plugin/callback/..*/"/> |