Доступ к услугам контент провайдеров категория 94 МТС- что это и как отключить на телефоне?

Доступ к услугам контент-провайдеров мтс – что это такое?

Компания MTS является крупнейшим оператором на нашем рынке. Организация предоставляет клиентам широкий спектр услуг – СМС, голосовые вызовы, мобильный интернет и т. д. Преимуществом оператора является идеальное сочетание цены и качества мобильной связи.

Но кроме основных услуг, компания предоставляет клиентам доступ к дополнительным возможностям. Одна из них – заказ контента. Абонент может подписаться на интересующие сервисы и регулярно получать от них информацию.

Memento mori

Итак, мы рассмотрели одно из слабых мест в Android-приложениях. Я постарался показать, насколько важно использовать по максимуму возможности по разграничению доступа, которые предлагает операционная система.

Разработчикам мобильных приложений хочется напомнить, что, написав контент-провайдер, вы принимаете решение поделиться информацией, поэтому стоит подумать, кто и в каком объеме сможет получить к ней доступ. Также многие забывают, что уязвимостям типа SQL injection подвержены не только веб-приложения. Поэтому санитизацию пользовательского ввода и использование prepared statements никто не отменял, даже под Android.

В чем особенность услуги?

Многие пользователи жалуются, что оператор без уведомления подключил им платные подписки. Вполне естественно, что люди винят компанию, ведь именно она списывает средства со счета и передает их провайдерам контента.

На деле MTS является всего лишь посредником. Организация получает официальный запрос, подтвержденный абонентом. Так как с провайдерами заключено соглашение, компания активирует списание ежедневной или ежемесячной платы.

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

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

Помните: оператор никогда не подключает подписки самостоятельно! Компания активирует их только после получения подтверждения от абонента. Поэтому будьте очень осторожны, читайте условия на сайтах и не переходите по непонятным ссылкам. Так вы сможете избежать случайной активации платной подписки.

Виды мобильного контента

Мобильный контент (Mobile Content) — это любая информация в виде мелодий, картинок, анимаций, видеороликов, фильмов, игр, программ, которая может быть передана на мобильный телефон или смартфон, а также рингтоны, темы и приложения, предназначенные для просмотра или воспроизведения на переносном устройстве.

Мобильным контентом являются:

видеоклипы, показанные в качестве приветствия голосовой почты;

  • – информационные программы — новости, спорт, погода, время, курсы валют;
  • – мелодии (рингтоны, реалтоны), логотипы;
  • — мобильные Java-игры;
  • — TV-проекты, викторины, розыгрыши;
  • — служба знакомств;
  • — мобильный маркетинг;
  • – прочие мобильные сервисы (бронирование проездных билетов, обслуживание туристов).

К видеосервисам относятся:

— телевизионные программы;

фильмы, мультфильмы, видеоклипы, видеоролики;

Услуга RBT (Ring Back Tone) — это сигнал (мелодия или рингтон) ожидания ответа. К сегменту RBT относится и сервис X-tonеs, имеющий стабильно высокий доход. Этот персонифицированный развлекательный сервис позволяет абонентам мобильной связи заменять стандартный сигнал контроля посыла вызова (КПВ) на входящих и исходящих вызовах мелодиями или звуковыми сообщениями.

Медийные продукты могут быть либо загружаемыми, либо потоковыми (streaming), когда аудио- и видеоматериалы воспроизводятся из Интернета без их предварительного скачивания в компьютер. Компания J’son & Partners Consulting представила результаты обновленного исследования российского и мирового рынков мобильного контента, мониторинг которого она проводила с 2004 г.

По ее данным, в 2022 г. на сегмент RBT вместе с сегментом музыки в формате тр3 пришлось 41% рынка, на Java-игры — 20%, на сегмент контента магазинов приложений — 12% рынка. В 2022 г. значительный рост продемонстрировал сегмент мобильного телевидения — 6%.

Компания J’son & Partners Consulting отмечает, что в последние годы произошли изменения в структуре рынка мобильного контента. Если раньше его основными поставщиками были сервис-провайдеры, то теперь основу развития этого направления составляют многоплатформенные решения операторов и магазины приложений.

До 2022 г. рост продаж мобильного контента был обусловлен в основном возможностью пользователей мобильных устройств потреблять всевозможные сервисы, предлагаемые контент-провайдерами, ростом ассортимента этих услуг и улучшением их качества. В конце 2Ö06 г.

в России насчитывалось 300—400 контент-провайдеров и агрегаторов. Из их числа только 10—15 достигали значительных объемов продаж, позволяющих им контролировать свыше 60% рынка. Модель взаимодействия на рынке мобильного контента, основанную на использовании услуг реселлеров и сервис-провайдеров, можно представить в виде схемы взаимодействия “разработчик — правообладатель — реселлер/сервис-провайдер — оператор”.

Как активируются подписки на платный контент

Оператор сотовой связи регулярно знакомит абонента с рекламой об особенностях той или иной услуги, после чего человек либо отказывается, либо подписывается на неё, нажимая на кнопку «Оформить подписку». Знакомство с услугой и её дальнейшая активация может происходить как в личном разговоре с оператором, так и через специальное приложение, установленное на телефоне. Узнать о платном контенте абонент может из рекламы, всплывающей на его смартфоне.

Включить доступ к платному контенту можно и из личного кабинета Мегафон.

Одна из бесплатных контент услуг на Мегафоне представлена на следующем изображении:

В личном кабинете представлена вся информация об используемом тарифе, его особенности, а также ежемесячный размер абонентской платы. Поменять тариф можно прямо с официального сайта. Кроме того, в личном кабинете возможно заказать подробную детализацию звонков, указав нужный период.

На официальном сайте Megafon можно просмотреть все доступные контент услуги на данный момент и активировать их одним нажатием по названию. Причём подписка включится не сразу, а лишь после внесения абонентской платы. Каждый месяц подписку придётся продлять, внося плату за её использование.

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

Иногда указанная стоимость контент услуги на Megafon отличается от её фактической. Поэтому при подключении подписки нужно внимательно прочитывать её описание и изучить особенности.

Любую проблему, связанную с ошибками активации платных подписок на Мегафоне, можно решить после связи с оператором.

Внешний вид интерфейса личного кабинета Мегафон можно охарактеризовать следующим образом:

Как задаются свойства контент-провайдера

Если обратиться к Android SDK (где весь процесс расписан очень подробно и по шагам), то видно, что для того, чтобы зарегистрировать свой контент-провайдер, тебе придется добавить описание провайдера в файл AndroidManifest.xml в секцию. Параметров при этом можно указать множество bit.ly, но мы рассмотрим лишь важные для нас:

Важная особенность — доступ к данным будет осуществляться при помощи специального URI со схемой «content». Параметр android:authorities является уникальным идентификатором провайдера и представляет собой первую часть URI, вторая часть будет указывать на то, какие именно данные мы хотим получить.

Параметр android:exported показывает, доступен ли провайдер для других приложений. Уже тут есть маленькая особенность, которая может испортить жизнь разработчику. Этот параметр в версиях Android до 16-й включительно (Android 4.1 JELLY_BEAN) по умолчанию установлен в «true», и все контент-провайдеры экспортируются, естественно, такая ситуация не безопасна.

Читайте про операторов:  Как сделать дубликат СИМ карты МегаФон, МТС, Билайн

Итак, в нашем случае для доступа к контент-провайдеру можно будет использовать URI вида:

content://com.test.provider/give_me_data_with_id/123

Фантазия разработчика при написании провайдера мало чем ограничена, дело в том, что обязательно нужно переопределить всего лишь шесть абстрактных методов (query(), insert(), update(), delete(), getType(), onCreate()). При этом никто не запрещает сделать эти методы пустыми, возвращать на любой запрос константу, результат чтения файла или обращения к сети.

Логотип Mercury
Логотип Mercury

И хотя никто не принуждает программиста прятать «под капотом» своего контент-провайдера базу данных, но очень часто тут встречается хорошо знакомая всем разработчикам мобильных приложений для Android SQLite. Тем более что используемый для получения данных ContentResolver всегда возвращает объект типа Cursor, что тонко намекает…

Как запретить поступление контента на мегафоне через личный кабинет

Это самый надежный способ, позволяющий навсегда избавиться от нежелательного контента. Метод выполняется по следующей схеме:

  1. Войти в личный кабинет Megafon по рассмотренной выше схеме.
  2. Переключиться на раздел «Услуги и опции».
  3. Далее необходимо перейти во вкладку «Все доступные» в графе параметров сверху открывшегося окошка.C:UsersЛюдмилаDesktopНовая папкаUslugi-i-optsii-v-lichnom-kabinete-Megafon.png
  4. После осуществления предыдущих манипуляций должен отобразиться список всех услуг, которые можно подключить на данный номер мобильного телефона. Здесь потребуется перейти в подраздел «Дополнительные услуги».
  5. Кликнуть один раз левой клавишей компьютерного манипулятора по опции «Запрет платных контентных коротких номеров».
  6. Теперь останется только тапнуть по строчке «Подключить», чтобы закончить процедуру.
  7. Дождаться завершения подключения и удостовериться, что нежелательный контент больше не поступает на телефон.

Просмотреть список с названиями подключенных услуг в личном кабинете Мегафона можно во вкладке «Мои».

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

После открытия дополнительного счёта абонентская плата за подписки взиматься не будет, если на балансе пользователя отсутствуют денежные средства.

Для открытия подобного счёта абоненту придётся обратиться в ближайший салон сотовой связи Мегафон и написать соответствующее заявление. Ответ на него будет дан в течение 15 рабочих дней. Оператор связи также вправе отказать абоненту в открытии дополнительного контентного счёта.

Таким образом, не все контент услуги на Megafon полезны для оьбычных пользователей. Для их отключения абоненту потребуется оформить подписку «Стоп-контент», а также для достоверности открыть дополнительный счёт.

Как избежать подключения?

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

Чтобы не искать инструкции по отключению подписок, соблюдайте следующие меры предосторожности:

Как отключить контент категории 94 мтс?

Для отключения всех платных подписок можно воспользоваться сервисом для контроля расходов. Наберите запрос *152#, или сразу вбейте *152*22#, чтобы не разбираться в меню. На телефон должно поступить сообщение с подтверждением.

Второй вариант – установить полный запрет на получение дополнительного контента. Для этого воспользуйтесь командой *984#. После подключения запрета должно поступить сообщение с подтверждением.

Также можно связаться со специалистом контактного центра. Вам потребуется:

Можно посетить офис компании:

  1. Найдите ближайший салон на карте на официальном сайте.
  2. Придите в него с документами.
  3. Предоставьте паспорт сотрудникам.
  4. Попросите проверить и отключить платные подписки.
  5. Специалисты сделают запрос и деактивируют дополнительные услуги.

Последний способ – личный кабинет. Зайдите в систему и перейдите к разделу с услугами. В нем можно найти все подписки и сразу отключить их без обращения к сотрудникам компании.

Как отключить начисления за контент

Чтобы перестать платить за подключенную услугу на Megafon, необходимо отказаться от неё. Процесс деактивации подписки выполняется по следующему алгоритму:

  1. Зайти в личный кабинет Мегафона через любой браузер установленный на телефоне, либо на компьютере.C:UsersЛюдмилаDesktopНовая папкаличный-кабинет-мегафон-1024x931.jpg
  2. Перейти в раздел с подписками. Здесь можно включить ту или иную услугу и отключить ненужный контент.
  3. Убедиться, что деактивация произошла. После этого абоненту не будет начисляться плата за подписку. О выключении услуги должно прийти SMS-сообщение.

Как отключить услуги контент-провайдеров на мтс?

Как отключить контент-провайдера МТС? На сегодня существует несколько способов:

  1. Через контактный центр.
  2. В интернет-помощнике.
  3. При помощи команды.
  4. В салоне компании.

Как подключить услугу «стоп-контент» на мегафоне

Для выполнения поставленной задачи не обязательно заходить в личный кабинет Megafon. Достаточно действовать по алгоритму:

  • Набрать на мобильном устройстве комбинацию клавиш «*105*801#».
  • После введения символов подписка на запрет нежелательного контента будет автоматически оформлена.
  • Ознакомиться с информацией в СМС, которая придёт на телефон сразу же после включения рассматриваемой услуги. При желании можно нажать на кнопку «Отключить», чтобы избавиться от данной опции.

Как работает услуга «стоп-контент» на мегафоне

Данная услуга блокирует нежелательный контент, звонки, SMS, а также платные USSD-запросы. Услуга начинает действовать сразу же после подключения в личном кабинете.

Стоп-контент не блокирует другие сервисы и приложения, установленные на смартфоне.

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

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

Контент-провайдеры в android с примером

packagecom.example.contentprovidersinandroid;

importandroid.content.ContentProvider;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.content.Context;

importandroid.content.UriMatcher;

importandroid.database.Cursor;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteException;

importandroid.database.sqlite.SQLiteOpenHelper;

importandroid.database.sqlite.SQLiteQueryBuilder;

importandroid.net.Uri;

importjava.util.HashMap;

publicclassMyContentProviderextendsContentProvider {

publicMyContentProvider() {

}

staticfinalString PROVIDER_NAME ="com.demo.user.provider";

staticfinalUri CONTENT_URI = Uri.parse(URL);

staticfinalString id ="id";

staticfinalString name ="name";

staticfinalinturiCode =1;

staticfinalUriMatcher uriMatcher;

privatestaticHashMap<String, String> values;

static{

uriMatcher =newUriMatcher(UriMatcher.NO_MATCH);

uriMatcher.addURI(PROVIDER_NAME,"users", uriCode);

uriMatcher.addURI(PROVIDER_NAME,"users/*", uriCode);

}

@Override

publicString getType(Uri uri) {

switch(uriMatcher.match(uri)) {

caseuriCode:

return"vnd.android.cursor.dir/users";

default:

thrownewIllegalArgumentException("Unsupported URI: " uri);

}

}

@Override

publicbooleanonCreate() {

Context context = getContext();

DatabaseHelper dbHelper =newDatabaseHelper(context);

db = dbHelper.getWritableDatabase();

if(db !=null) {

returntrue;

}

returnfalse;

}

@Override

publicCursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

SQLiteQueryBuilder qb =newSQLiteQueryBuilder();

qb.setTables(TABLE_NAME);

switch(uriMatcher.match(uri)) {

caseuriCode:

qb.setProjectionMap(values);

break;

default:

thrownewIllegalArgumentException("Unknown URI " uri);

}

if(sortOrder ==null|| sortOrder =="") {

sortOrder = id;

}

Cursor c = qb.query(db, projection, selection, selectionArgs,null,

null, sortOrder);

c.setNotificationUri(getContext().getContentResolver(), uri);

returnc;

}

@Override

publicUri insert(Uri uri, ContentValues values) {

longrowID = db.insert(TABLE_NAME,"", values);

if(rowID >) {

Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);

getContext().getContentResolver().notifyChange(_uri,null);

return_uri;

}

thrownewSQLiteException("Failed to add a record into " uri);

}

@Override

publicintupdate(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

intcount =;

switch(uriMatcher.match(uri)) {

caseuriCode:

count = db.update(TABLE_NAME, values, selection, selectionArgs);

break;

default:

thrownewIllegalArgumentException("Unknown URI " uri);

}

getContext().getContentResolver().notifyChange(uri,null);

count;return

}

@Override

publicintdelete(Uri uri, String selection, String[] selectionArgs) {

intcount =;

switch(uriMatcher.match(uri)) {

caseuriCode:

count = db.delete(TABLE_NAME, selection, selectionArgs);

break;

default:

thrownewIllegalArgumentException("Unknown URI " uri);

}

getContext().getContentResolver().notifyChange(uri,null);

count;return

}

privateSQLiteDatabase db;

staticfinalString DATABASE_NAME ="UserDB";

staticfinalString TABLE_NAME ="Users";

staticfinalintDATABASE_VERSION =1;

staticfinalString CREATE_DB_TABLE =" CREATE TABLE " TABLE_NAME

" (id INTEGER PRIMARY KEY AUTOINCREMENT, "

" name TEXT NOT NULL);";

privatestaticclassDatabaseHelperextendsSQLiteOpenHelper {

DatabaseHelper(Context context) {

super(context, DATABASE_NAME,null, DATABASE_VERSION);

}

@Override

publicvoidonCreate(SQLiteDatabase db) {

db.execSQL(CREATE_DB_TABLE);

}

@Override

publicvoidonUpgrade(SQLiteDatabase db,intoldVersion,intnewVersion) {

"DROP TABLE IF EXISTS "db.execSQL( TABLE_NAME);

onCreate(db);

}

}

}

Куда еще можно обратиться:

МВД РФ

Читайте про операторов:  Как вставить симку в Айфон: просто и быстро

Мегафон-москва: экспресс-интервью

На наши вопросы на тему изменений во взаимоотношениях оператора с контент-провайдерами отвечает Игорь Парфенов, генеральный директор компании МегаФон-Москва.

Примерно, с каким количеством контент-провайдеров работает компания?

К тому моменту, когда мы начали некоторую чистку, их было, по-моему, больше двухсот. Т.е. речь шла не о десятках, а сотнях провайдеров.

Какой финансовый порог работы с контент-провайдером Вам кажется разумным?

Какой-то определенный порог мы для себя не устанавливали. Но если месячный оборот контент-провайдера составляет несколько тысяч рублей, то это никуда не годится и вызывает подозрения. К тому же, работать с таким провайдером становится элементарно невыгодно: необходимо оформлять счет-фактуру, акт по взаимозачету и кучу всяких других документов.

Навскидку не вспомните, сколько договоров с такими контент-провайдерами компания разорвала за последний год?

Точную цифру называть не хотелось бы, но речь идет о десятках. Кстати, многие начинают задумываться, и после получения письма на расторжение договора начинают проявлять активность, давать рекламу и т. п.

Работаете ли вы с агрегаторами?

Да, мы такую схему поощряем и сами предлагаем провайдерам объединяться. Мы заинтересованы во взаимодействии с одной компанией.

Пишем свою утилиту для анализа контент-провайдеров

Ранее я уже упомянул Mercury от MWR Labs. Это замечательный набор инструментов, и я рекомендую им пользоваться. К сожалению, лично меня повергает в уныние один взгляд на пользовательское лицензионное соглашение, под которое попадает этот продукт. Кроме того, лучше всего усвоить материал на практике, тем более когда программирование не представляет существенной сложности.

Напишем свое приложение под Android для анализа контент-провайдеров. Что мы сделаем?

  1. Получим информацию обо всех зарегистрированных в операционной системе контент-провайдерах.
  2. Определим, какие из этих провайдеров не защищены с помощью привилегий.
  3. Немного поэкспериментируем ;).

Как я уже упоминал, провайдеры регистрируются в операционной системе при установке приложения. Поэтому самым удобным инструментом для извлечения информации будет PackageManager.

getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS).size();
  ...
    for (PackageInfo pack : getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS)){
providers = pack.providers;
if (providers != null){
for (ProviderInfo provider : providers){
if (provider.authority != null){
//provider.authority
//provider.readPermission
//provider.writePermission
...
}
}
}
}

Объект типа ProviderInfo содержит всю необходимую нам информацию. Мы получим соответствующий ContentResolver и обработаем результат и возможные исключения.

...
try
{
Uri uri = Uri.parse(authority); // Получаем URI вида content: //
...// Подготавливаем параметры для обращения к контент-провайдеру
// Запрашиваем данные у контент-провайдера. В ответ получим курсор или исключение
Cursor c = getContentResolver().query(uri, prj, selection, sel_args, null);
int col_c = c.getColumnCount();
...
// Проходим курсором по результатам запроса
if (c.moveToFirst()) {
do {
// Пробежимся по всем колонкам
for (int i=0; i<col_c; i  )
{
// Если в колонке, возможно, картинка
if (Columns[i].toLowerCase().contains("image"))
{
...
byte[] blob = c.getBlob(i);
// то показываем в hex-виде (можно и отобразить на экране устройства)
s  =  bytesToHexString(blob);
}
else
{
try
{
// Если содержимое колонки не отображается как текст
s  = c.getString(i);
}
catch (Exception e)
{
// показываем как hex
byte[] blob = c.getBlob(i);
s  = bytesToHexString(blob);
}
}
}
} while (c.moveToNext());
}
}
catch(Exception e)
{
// Чаще всего исключения возникают из-за недостатка прав или ошибки в запросе, но в любом случае они очень информативны
s  = e.getMessage();
...

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

Главное окно приложения. Позволяет выбрать параметры для вызова контент-провайдера
Главное окно приложения. Позволяет выбрать параметры для вызова контент-провайдера

Раз утилита готова — как я и обещал, немного поэкспериментируем. Я использовал обычный смартфон, старый Samsung Galaxy S с последней официальной прошивкой и некоторым набором самых распространенных приложений.

В списке контент-провайдеров своего телефона ты самостоятельно можешь найти что-то забавное. Например, мое внимание привлек провайдер com.sec.provider.facekey. В advisory MWR Labs про него ничего не сказано, тем не менее он представляет определенный интерес.

Дело в том, что он устанавливается и используется системой «биометрической» блокировки экрана по снимку лица. Удивительно, что привилегии, запрещающие чтение и запись, в данном случае не установлены. Попробуем передать провайдеру SQL injection вектор «* from sqlite_master–».

Биометрическая блокировка экрана (Samsung Galaxy S)
Биометрическая блокировка экрана (Samsung Galaxy S)

С интересом узнаем, что мы получили доступ к базе данных с табличкой facefeature следующего вида:

CREATE TABLE facefeature (_id integer primary key autoincrement, facetime long, facefeature blob, faceimage blob);

Данные из этой таблицы легко читаются, кстати, замечу, что наша тестовая утилита не запрашивает никаких привилегий. Но при этом вполне может считать особенности твоего лица :).

Немного порывшись в списке, можно считать настройки телефона из провайдера com.settings (например, content://com.settings/secure). Это несмотря на то, что разрешения READ_SETTINGS мы не имеем.

Интересный результат дает обращение к «content://com.google.settings/sqlite_master–» (что ж, и Google промахивается):

Authority: content://com.google.settings/sqlite_master--
Projection:null
Selection:null
Selection args:null
type:name:tbl_name:rootpage:sql:
table;android_metadata;android_metadata;
3;CREATE TABLE android_metadata (locale TEXT);
table;partner;partner;
4;CREATE TABLE partner (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);
index;sqlite_autoindex_partner_1;partner;
5;null;
table;sqlite_sequence;sqlite_sequence;
6;CREATE TABLE sqlite_sequence(name,seq);
index;partnerIndex1;partner;
7;CREATE INDEX partnerIndex1 ON partner (name);

Дальнейшие эксперименты я оставляю читателю. Все исходные тексты утилиты доступны на GitHub.

Как задаются свойства контент-провайдера

Если обратиться к Android SDK (где весь процесс расписан очень подробно и по шагам), то видно, что для того, чтобы зарегистрировать свой контент-провайдер, тебе придется добавить описание провайдера в файл AndroidManifest.xml в секцию. Параметров при этом можно указать множество bit.ly, но мы рассмотрим лишь важные для нас:

<provider
   android:authorities="com.test.provider"
   android:name=".provider.MyContentProvider"
   android:exported="true|false">
</provider>

Важная особенность — доступ к данным будет осуществляться при помощи специального URI со схемой «content». Параметр android:authorities является уникальным идентификатором провайдера и представляет собой первую часть URI, вторая часть будет указывать на то, какие именно данные мы хотим получить. Параметр android:exported показывает, доступен ли провайдер для других приложений. Уже тут есть маленькая особенность, которая может испортить жизнь разработчику. Этот параметр в версиях Android до 16-й включительно (Android 4.1 JELLY_BEAN) по умолчанию установлен в «true», и все контент-провайдеры экспортируются, естественно, такая ситуация не безопасна. Но только с версии 17 (Android 4.2 JELLY_BEAN_MR1) в ОС было внесено исправление, и теперь, чтобы экспортировать провайдер, необходимо самостоятельно изменить используемый по умолчанию «false».

Итак, в нашем случае для доступа к контент-провайдеру можно будет использовать URI вида:

content://com.test.provider/give_me_data_with_id/123

Фантазия разработчика при написании провайдера мало чем ограничена, дело в том, что обязательно нужно переопределить всего лишь шесть абстрактных методов (query(), insert(), update(), delete(), getType(), onCreate()). При этом никто не запрещает сделать эти методы пустыми, возвращать на любой запрос константу, результат чтения файла или обращения к сети. Тем более если твой провайдер предоставляет доступ к данным только на чтение, то методы insert(), update() и так далее ему совсем не нужны.

Логотип Mercury
Логотип Mercury

И хотя никто не принуждает программиста прятать «под капотом» своего контент-провайдера базу данных, но очень часто тут встречается хорошо знакомая всем разработчикам мобильных приложений для Android SQLite. Тем более что используемый для получения данных ContentResolver всегда возвращает объект типа Cursor, что тонко намекает…

Читайте про операторов:  Нано сим карта как обрезать Теле2

Проблемы и решения

Итак, мы уже можем сделать предварительные выводы о том, чем нам грозит плохо реализованный контент-провайдер:

  1. Несанкционированный доступ к персональным данным пользователя и чувствительной информации. Причиной может быть открытый контент-провайдер, который установило в систему легитимное приложение с высоким уровнем привилегий. Предположим, мы хотим почитать из своей не совсем легальной программы SMS пользователя. Если мы запросим напрямую разрешение READ_SMS, то привлечем к себе ненужное внимание. Да и человека, который установит программу, читающую SMS, еще нужно поискать. С другой стороны, можно поискать уже зарегистрированный в системе контент-провайдер, который установило привилегированное стороннее или встроенное приложение.
  2. Уязвимости типа SQL injection в провайдерах, работающих с базами данных. К сожалению, фильтрация пользовательского ввода полностью отдана на откуп разработчику мобильных приложений. Более того, «корпорация добра» оставила в документации множество грабель, на которые наступают программисты. Так, в разделе Content Provider Basics Android SDK есть подраздел Protecting Against Malicious Input, на который многие просто не обращают внимания. Разработчики не совсем точно понимают, как работают интерфейсы для обращения к БД SQLite в Android. Например, многие полагают, что повсеместно используемый метод query из класса android.database.sqlite совершенно безопасен. Но это не соответствует действительности, исследователи из MWR Labs достаточно подробно описали проблему и даже нашли несколько уязвимостей в устройствах Samsung. Они также выпустили удобный фреймворк Mercury, который позволяет находить такие дырки в приложениях. Многие разработчики не используют prepared statements, хотя они были в Android с первой версии API.
Интерфейс командной строки MWR Mercury
Интерфейс командной строки MWR Mercury

Разграничение доступа и контент-провайдеры

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

На самом верхнем уровне можно просто сделать провайдер неэкспортируемым и пользоваться им внутри своего приложения. Если мы все-таки решили его экспортировать, то можно глобально ограничить к нему доступ с помощью параметра android:permission в секцииманифеста.

В качестве разрешения можно использовать любое, уже определенное в системе, или задать свое собственное. Это очень удобно, если мы хотим разрешить доступ к провайдеру для группы своих приложений. Мы просто даем всем своим приложениям нестандартное разрешение, точно таким же разрешением закрываем доступ к провайдеру. После этого все приложения из нашей уютной инфраструктуры получат доступ к провайдеру на чтение и запись.

Для более тонкой регулировки можно использовать параметры android:readPermission и android:writePermission. Как ясно из их названий, они позволяют установить отдельно ограничение доступа на чтение или запись. Причем эти параметры имеют больший приоритет, чем более общий параметр android:permission.

Но есть и еще один, более глубокий уровень регулировки доступа. Он позволяет разрешить доступ к определенному набору информации, который поставляет провайдер. На полную катушку в этом случае используется то, что доступ к провайдеру осуществляется через URI bit.ly.

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

Сам себе злобный буратино

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

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

Одним из таких решений стали контент-провайдеры. Контент-провайдер — это поставщик данных. Любое приложение может создать своего контент-провайдера, который после установки приложения будет зарегистрирован операционной системой (см. врезку «Как задаются свойства контент-провайдера»).

Сетевые посредники мобильного контента

Мобильный контент (музыка, звонки (рингтоны), новости, ТВ и др.) поступает от производителя к потребителю через нескольких посредников. Они преобразуют его, интегрируют, пакетируют, распространяют, транспортируют и предоставляют к нему доступ. Эти функции реализуют контент-интеграторы, сервис-провайдеры, операторы связи и операторы доступа. Некоторые функции могут быть обеспечены одним посредником.

Ниже представлены основные функции передачи и ее участники.

  • Преобразование контента. Созданный производителем контент преобразуется для различных способов его потребления, например игры для мобильного телефона или для игровой приставки.
  • Агрегация контента. Реселлер собирает контент от различных производителей и продает его в розницу сервис-провайдерам, которые, используя транспортные возможности сетей операторов мобильной связи, предлагают его потребителям.
  • Оператор сети доступа. Он занимает центральное место в цепи передачи, имеет доступ непосредственно к потребителям контента (клиентской базе).

Каждое звено в этой цепочке получает свою долю прибыли. Не желая ее терять, многие участники цепи объединяют и реализуют несколько функций. Так, сотовый оператор может выполнять одновременно функции оператора сети и провайдера доступа.

В общем случае с сотовым оператором могут сотрудничать десятки и сотни контент-провайдеров (провайдеров доступа). Однако в случае сложных в техническом отношении услуг нового поколения (например, мобильное телевидение) оператор сети берет на себя и функции сервис-провайдера, чтобы обеспечить потребителю высокое качество услуги.

В последнее время основные слияния функций наблюдаются между разработчиками, реселлерами и контент-провайдерами (сервис-провайдерами). Так как качество услуги во многом зависит от функциональности мобильного телефона или смартфона, то возможны объединения между разработчиками мобильного аппарата, производителями контента и мобильными операторами.

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

Цепочка доведения контента до конечного пользователя может быть ограничена тремя звеньями: производитель и агрегатор контента, сервис-провайдер, мобильный оператор.

Услуга сервисы контент-провайдеров – мобильный билайн – москва

Посещая сайт beeline.ru вы предоставляете согласие на обработку данных о посещении вами сайта beeline.ru (данные cookies и иные пользовательские данные), сбор которых автоматически осуществляется ПАО «ВымпелКом» (Российская Федерация, 127083, г. Москва, ул. 8 Марта, д. 10, стр. 14, далее — билайн) на условиях Политики обработки персональных данных. Компания также может использовать указанные данные для их последующей обработки системами Google Analytics, Яндекс.Метрика, MyTarget, Monkey, Dynamic Yield и др., а также передавать / привлекать к обработке данных третьих лиц, перечень которых размещен здесь. Обработка осуществляется с целью функционирования сайта beeline.ru и продвижения товаров, работ, услуг билайна и третьих лиц. В случае отказа от обработки данных вы проинформированы о необходимости прекратить использование сайта или отключить файлы cookies в настройках браузера.

ПАО «ВымпелКом» раскрывает информацию, раскрытие которой предусмотрено законодательством РФ о ценных бумагах также на странице в сети Интернет ООО «Интерфакс-ЦРКИ» – информационного агентства, аккредитованного ЦБ РФ на раскрытие информации. Информация доступна по ссылке

Добавить комментарий

Ваш адрес email не будет опубликован.

Adblock
detector