Разрешение HTTP и HTTPS запросов в Android 9 Pie
Быстрый ответ
Для разрешения работы по протоколам HTTP и HTTPS в Android 9, следует настроить параметры безопасности сетевого подключения приложения таким образом:
- Создайте файл
res/xml/network_security_config.xml
:
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
- Добавьте ссылку на указанный файл в
AndroidManifest.xml
:
<application
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
Установка параметра cleartextTrafficPermitted="true"
позволит вашему приложению работать по протоколу HTTP. Однако не забывайте, что безопасность гарантируется использованием HTTPS.
Разъяснение концепций сетевой безопасности
Безопасность против гибкости
Разрешение использования как HTTP, так и HTTPS может быть необходимым для определенных приложений, однако следует помнить, что такая стратегия может увеличивать риски безопасности. Используйте HTTPS там, где это возможно, и разрешайте HTTP исключительно для проверенных доменов.
Изменения в поведении по умолчанию
В Android 9 Pie атрибут usesCleartextTraffic
по умолчанию установлен как false
. Это означает, что приложения, для которых целевым API является уровень 28 и выше, не смогут отправлять или получать открытый незашифрованный трафик без явного разрешения. Для приложений с уровнем API 27 и ниже значение по умолчанию — true
.
Усиление защиты определенных доменов
Вы можете более детально настроить защиту для конкретных доменов в network_security_config.xml
, задав нужные параметры для каждого из них. Например, для домена example.com
:
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">example.com</domain>
</domain-config>
И React Native тоже!
Политика безопасности также относится к приложениям на React-Native. Измените соответствующий react_native_config.xml
, чтобы обеспечить соответствующие настройки безопасности.
Профессиональные советы для разработчиков
Отладка и тестирование
Прежде чем выпустить приложение, обязательно проведите его тестирование, особое внимание уделяя возможным уязвимостям и проблемам безопасности.
Работа с устаревшим кодом
Если вам требуется поддерживать устаревшие HTTP API, воспользуйтесь следующим кодом:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Для новых проектов рекомендуется использовать современные решения, например, OkHttp
и Retrofit
.
Локальные хосты и IP-адреса
Во время разработки убедитесь, что приложение корректно работает с локальными хостами и IP-адресами, так как в ходе разработки могут применяться исключения из общих правил безопасности.
Изучение возможных решений
Прежде чем отключить настройки TLS по умолчанию, проведите тщательное исследование и позаботьтесь о минимизации рисков.
Удовлетворение различных потребностей
Если приложению требуется гибкость в различных условиях, то использование и HTTP, и HTTPS может быть оправданным.
Визуализация
Трафик HTTP и HTTPS в Android Pie можно представить в виде дорог:
HTTP 🛣️ HTTPS 🛤️
📱 --------> 🌐 Android Pie воспринимает оба 📱 ----------> 🌐
Android Pie поддерживает оба типа подключений:
HTTP
🚗 (без защиты, могут быть прерваны)HTTPS
🚙 (защищены шифрованием, имеют VIP-проход)
Наша цель – настроить проверку трафика таким образом, чтобы обеспечить свободное движение обоих видов подключений, гарантировав стабильное взаимодействие для приложения.
Полезные материалы
- Конфигурация безопасности сети | Android Developers — Официальная документация по настройке безопасности сети для Android.
- Обзор – OkHttp — Руководство по эффективному использованию HTTP-клиента OkHttp, оптимального для Android.
- HttpsURLConnection | Android Developers — Информация о работе с HTTPS-запросами через
HttpsURLConnection
. - Android 8: Cleartext HTTP traffic not permitted | Stack Overflow — Обсуждение на Stack Overflow проблем с открытым трафиком в Android 8.
- Использование OkHttp | CodePath Android Cliffnotes — Практическое руководство по настройке политики безопасности сети с OkHttp от CodePath.
- Codelab по настройке безопасности сети Android | Android Developers — Учебный проект Google Codelab по настройке безопасности сети на Android.
- Retrofit — Retrofit, HTTP-клиент высокого уровня для Android и Java, облегчающий интеграцию API.