Указан небезопасный путь к 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/..*/"/> |