Приложение VPN просит контакты и доступность: что разрешить
VPN нужно одно сетевое разрешение. Доступность, контакты и установка сертификата требуют собственного обоснования, которого функция маршрутизации дать не может.
Установщик запрашивает доступ к сети, затем контакты, доступность и установку сертификата. К задаче относится только первый запрос. На втором экране и находится настоящее решение.
Оценивайте каждый запрос по функции, которую вы выбрали, на платформе, которую используете. Ни один универсальный список разрешений не охватывает каждый продукт VPN, а длинный список сам по себе ничего не доказывает.
Единственное разрешение, которое задаче действительно нужно
Android просит пользователя одобрить службу VPN через системный диалог до запуска любого туннеля, а служба приложения объявляет BIND_VPN_SERVICE, чтобы система могла привязаться к ней. Операционно приложение выполняет маршрутизацию. Согласие даёт человек, держащий устройство, в диалоге, где названо приложение, а отзыв позже — поддерживаемое действие.
Платформы Apple выражают ту же идею через сетевое расширение плюс одобрение установки, а не через экран разрешений. Windows использует драйвер виртуального адаптера и запрос на повышение прав. Две формы, один смысл: эта программа может обрабатывать пакеты. Ничто в этом разрешении не покрывает чтение вашей адресной книги или выдачу собственного удостоверяющего центра.
Дополнительный доступ — это отдельное разрешение с отдельными последствиями. Клиенту маршрутизации, который его хочет, нужно собственное обоснование.
Где дополнительным запросам нужна своя история
Служба доступности может читать содержимое экрана и действовать от вашего имени, что далеко выходит за пределы маршрутизации. Администрирование устройства может применять политики блокировки и стирать данные. Установленный пользователем корневой сертификат позволяет тому, у кого есть подходящий ключ, читать трафик, который TLS иначе защитил бы.
Любое из этого может быть законным. Продуктам для управляемых устройств и родительского контроля могут понадобиться полномочия политики, а инструменту поддержки может понадобиться доступность, чтобы провести вас по настройкам.
Требование — прослеживаемость: запрос указывает на названную функцию, и эта функция видна в продукте, который вы установили. Запрос контактов без экрана, обращённого к контактам, не может ничего объяснить. Аргумент о шифровании тоже не переносится, потому что защита пакетов ничего не говорит о том, кто ваши друзья. Законный продукт всё равно может запрашивать лишнее через встроенную библиотеку, и это недостаток, о котором стоит сообщить, а не преступление, о котором стоит заявлять.
Запишите запрос и функцию, к которой он относится, затем решите. Эта запись — ещё и то, что вы показываете поддержке, когда функция ломается после отказа.
Чтение запроса на устройстве
Карточка в магазине описывает намерение, а установленный пакет описывает реальность. Спросите менеджер пакетов, что объявлено и что предоставлено, прежде чем одобрять что-либо ещё. Эта пара важнее всего, когда карточка и манифест расходятся.
Две команды охватывают большую часть:
adb shell dumpsys package com.example.vpn | grep -E "requested permissions|install permissions" -A 30 adb shell cmd appops get com.example.vpn
Первая перечисляет объявленные разрешения против предоставленных, и именно это сравнение выявляет слишком широкий манифест. Вторая показывает app-ops во время выполнения, включая особые доступы, которые никогда не появляются как обычные разрешения. Там, где инструменты разработчика недоступны, прочитайте те же факты на экранах настроек платформы.
Эти экраны занимают минуту и не требуют программного обеспечения. Доступность, администрирование устройства и хранилище сертификатов — каждый перечисляет приложения, у которых есть разрешение.
Решение, а затем ограничение ущерба
Выдайте сетевое разрешение выбранному вами клиенту и рассматривайте каждый дополнительный запрос как отдельное решение. Откажите тем, у кого нет соответствующей функции, затем посмотрите, что сломается. Клиент маршрутизации, который отказывает, когда доступ к контактам запрещён, никогда не просил контакты от вашего имени.
Отзыв одного разрешения обычно отключает одну функцию без удаления приложения или разбора каждого профиля. После этого подключитесь снова и убедитесь, что туннель по-прежнему устанавливается.
Разделите два вопроса, которые диалог обычно сливает: что эта программа может делать на устройстве и что её оператор делает с трафиком после поднятия туннеля. Первый решается здесь. Второй требует политики хранения, и ни один диалог её не предоставляет.