Перейти к содержанию

Указан небезопасный путь к 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-permission
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
/>
Указывает подмножества данных приложения, к которым у Content Provider есть разрешение на доступ
<path-permission
android: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/..*/"/>

Ссылки

  1. Permissions on Android
  2. Распространенные ошибки при использовании разрешений в Android
  3. Permissions в Android: как не допустить ошибок при разработке
  4. Content Provider шарит все свои данные
  5. Описание флагов для открытия доступа к определенному Uri
К началу