usescleartexttraffic android что это

Fix Cleartext Traffic Error in Android 9 Pie

Sep 28, 2018 · 2 min read

Finally, Android Pie was released and we can’t wait to try it on an existing project. But when we try to run our app on emulator, we saw this error

java.io.IOException: Cleartext HTTP traffic to * not permitted

So what this exactly mean?

Cleartext is any transmitted or stored information that is not encrypted or meant to be encrypted.

When an app communicates with servers using a cleartext network traffic, such as HTTP, it could raise a risk of eavesdropping and tampering of content. Third parties can inject unauthorized data or leak information about the users. That is why developers are encouraged to a secure traffic only, such as HTTPS.

But just in ca s e using cleartext is inevitable, developers can fix the error by

Android 6.0 introduced the useCleartextTraffic attribute under application element in android manifest. The default value in Android P is “false”. Setting this to true indicates that the app intends to use clear network traffic.

However, this may appear to fix the problem but it opens a threat to data integrity. A better solution is offered in Android 7.0 through network security configuration file.

Network security configuration allows an app to permit cleartext traffic from a certain domain.

How to use it?

2. Add a domain config and set cleartextTrafficPermitted to “true”.

3. Add your network security config to your Android manifest file under application.

TL;DR — You can fix cleartext traffic error by adding useCleartextTraffic=”true” in android manifest or by adding your domain through a Network security config file and set cleartextTrafficPermitted=”true”.

But still at the end of the day, better use a secure network traffic rather than a cleartext.

Источник

Android 8: открытый HTTP-трафик не разрешен

у меня были отчеты от пользователей с https://over.wiki/android/» >Android 8, что мое приложение (которое использует фоновый канал) не показывает контент. После расследования я обнаружил следующее исключение, происходящее на Android 8:

(Я удалил имя пакета, URL и другие возможные идентификаторы)

на Android 7 и ниже все работает, я не устанавливаю android:usesCleartextTraffic в манифесте (и установка true не помогает, это значение по умолчанию в любом случае), и я не использую информацию о безопасности сети. если я звоните NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted() возвращает false для Android 8, true для более старой версии, используя тот же файл apk. Я попытался найти упоминание об этом в Google info об Android O, но безуспешно.

7 ответов

начиная с Android 9.0 (уровень API 28), поддержка открытого текста по умолчанию отключено.

целевая песочница для этого приложения для использования. Чем выше версия песочницы число, тем выше уровень безопасности. Его значение по умолчанию-1; you также можно установить значение 2. Установка этого атрибута на 2 переключает приложение на другая песочница SELinux. Следующие ограничения применяются к Уровень 2 песочницы:

если у вас android:targetSandboxVersion на затем уменьшить его до 1

в AndroidManifest я нашел этот параметр:

и @xml / network_security_config определяется в network_security_config.xml как:

просто я изменил cleartextTrafficPermitted на true

это может быть полезно для кого-то.

недавно у нас была такая же проблема для Android 9, но нам нужно было только отобразить некоторые URL-адреса в WebView, ничего особенного. Итак, добавление android:usesCleartextTraffic=»true» Манифест работал, но мы не хотели ставить под угрозу безопасность всего приложения для этого. Таким образом, исправление состояло в изменении ссылок с http to https

указывает целевую песочницу, которую хочет использовать это приложение. Более высокие версии sanbox будут иметь повышенный уровень безопасности.

значение по умолчанию этот атрибут 1.

Это, очевидно, также добавляет новый уровень политики безопасности, по крайней мере на Android 8.

в предложении, приведенном выше, я предоставлял свой URL как http://xyz.abc.com/mno/

Я изменил это на xyz.abc.com затем он начал работать.

У меня такая же проблема, и я попробовал все вышеперечисленные решения, но ничего из этого не получится.

для меня я решил это, изменив свой url-адрес с HTTP к HTTPS;

Источник

Android 8: открытый HTTP-трафик не разрешен

У меня были сообщения от пользователей с Android 8, что мое приложение (которое использует внутренний канал) не показывает контент. После расследования я обнаружил следующее исключение, происходящее на Android 8:

(Я удалил имя пакета, URL и другие возможные идентификаторы)

Начиная с Android 9 (уровень API 28), поддержка открытого текста по умолчанию отключена.

Сначала попробуйте ввести URL с помощью «https: //» вместо «http: //».

Целевая песочница для этого приложения. Чем выше номер версии песочницы, тем выше уровень безопасности. Его значение по умолчанию равно 1; Вы также можете установить его на 2. Установка этого атрибута на 2 переключает приложение в другую изолированную программную среду SELinux. Следующие ограничения применяются к песочнице уровня 2:

Читайте также:  vamos verde что это

Если у вас есть android:targetSandboxVersion в том уменьшить его 1

В AndroidManifest я нашел этот параметр:

и @ xml / network_security_config определяется в network_security_config.xml как:

только что я изменил cleartextTrafficPermitted на true

Моя проблема в Android 9 заключалась в навигации по веб-сайтам по доменам с http. Решение из этого ответа

Рез / XML / network_security_config.xml

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

В build.gradle:

В теге приложения в AndroidManifest.xml

Измените ваш URL с HTTP на HTTPS ;

В предложении, приведенном выше, я указывал свой URL как http://xyz.abc.com/mno/

Я изменил это на xyz.abc.com, затем он начал работать.

Android имеет своего рода функцию перезаписи для src-Directory.

По умолчанию у вас есть

Но вы можете добавить дополнительные каталоги, чтобы перезаписать ваш AndroidManifest.xml. Вот как это работает:

Внутри этого файла вам не нужно помещать в него все правила, а только те, которые вы хотите перезаписать из вашего / app / src / main / AndroidManifest.xml

Вот пример того, как это выглядит для запрошенного CLEARTEXT-Permission:

Обладая этими знаниями, теперь вы можете с легкостью перегрузить разрешения на 1,2,3 в зависимости от отладки | главная | освободить окружающую среду.

Это может быть полезно для кого-то.

У нас недавно была та же проблема для Android 9, но нам нужно было отображать только несколько URL-адресов в WebView, ничего особенного. Поэтому добавление android:usesCleartextTraffic=»true» в Manifest сработало, но мы не хотели ставить под угрозу безопасность всего приложения для этого. Так что исправление было в изменении ссылок с http на https

Для проектов React Native

Это было уже исправлено на RN 0,59. Вы можете найти при обновлении diff с 0.58.6 до 0.59. Вы можете применить его без обновления версии RN, выполнив следующие действия:

Проверьте принятый ответ, чтобы узнать причину.

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

Значение этого атрибута по умолчанию равно 1.

Это, очевидно, также добавляет новый уровень политики безопасности, по крайней мере, на Android 8.

Я удалил эту строку из файла манифеста Android, который уже существует

это в теге приложения в манифесте

тогда эта ошибка в незашифрованном виде HTTP-трафик на overlay.openstreetmap.nl не разрешен для меня в Android 9 и 10. Я надеюсь, что это будет работать для Android 8, и если это поможет, вы не забудьте проголосовать спасибо

Примечание. Обычно атрибуты уровня сборки добавляются в ваш AssemblyInfo.cs файл, но любой файл ниже using и выше namespace работает.

Затем в своем подклассе Application (при необходимости создайте его) вы можете добавить NetworkSecurityConfig ссылку на Resources/xml/ZZZZ.xml файл:

Создайте файл в Resources/xml папке (создайте xml папку при необходимости).

Вы также можете использовать UsesCleartextTraffic параметр в ApplicationAttribute :

Я также получил ту же ошибку «HTTP-трафик в незашифрованном виде запрещен» при разработке моего приложения. Я использую Retrofit2 для сетевых вызовов в моем приложении, и у меня есть две проектные среды (разработка и производство). Мой производственный домен имеет сертификат SSL с вызовами HTTPS, а у dev не будет https. Конфигурация добавлена ​​в версии сборки. Но когда я перехожу на dev, эта проблема сработает. Поэтому я добавил ниже-решение для этого.

Я добавил открытый трафик в манифест

Затем я добавил спецификацию соединения во время создания класса конфигурации OKHttp.

Полное создание OkHttpClient приведено ниже

Предыдущие версии ионных

Убедитесь, что в вашем config.xml Ionic Project есть следующее :

Запустите ионную сборку Cordova на андроид. Это создает папку Android под Платформы

Откройте Android Studio и откройте папку Android, присутствующую в нашем проекте project-platform-android. Оставьте это в течение нескольких минут, чтобы это построило gradle

Убедитесь, что он удален из обоих мест:

Теперь попробуйте снова построить gradle, и теперь он успешно собирается.

Убедитесь, что у вас есть следующее в теге приложения в App → manifest → Androidmanifest.xml :

Откройте network_security_config (приложение → res → xml → network_security_config.xml ).

Добавьте следующий код:

Вот xxx.yyyy.com ссылка на ваш HTTP API. Убедитесь, что вы не включили Http перед URL.

Если у вас установлены более старые версии приложения, удалите их и попробуйте, иначе у вас останется какая-то ошибка:

Это сделано из соображений безопасности, вы всегда должны использовать HTTPS (HTTP Secure ), где это возможно.
Вы можете прочитать больше об этом здесь

Есть несколько решений этой проблемы в зависимости от вашего состояния.

Читайте также:  агрегатная замена что это

Если вы пытаетесь установить связь со сторонним сервисом, IE: ваш собственный веб-сервер

Серверная сторона: Вы должны добавить поддержку HTTPS на этот сервер и использовать HTTPS вместо HTTP. В наши дни вы даже можете сделать это бесплатно, используя такие сервисы, как LetsEncrypt и другие.
Клиентская часть: если вы используете пакет HttpURLConnection из java.net пакета, вы можете переключиться HttpsURLConnection на java.net.ssl пакета, он имеет похожий, если не идентичный API, поэтому переключение должно быть простым.

Если вы используете стороннюю службу, например Google, Facebook, службу погоды и т. Д.

Источник

Android M and the war on cleartext traffic

A week ago, during WWDC, Apple announced App Transport Security (ATS) for iOS 9. This feature will allow app developers to specify which domains their app needs to communicate with over HTTPS. In principle, for those domains, cleartext traffic will be automatically blocked by the system.

What about Android?

Google has not yet announced it officially, but the next Android version (codenamed Android M) has a “similar” feature. The code that includes this has actually been around for a while before Apple’s WWDC conference, but no-one seems to have picked it up.

Starting with Android M, apps are able to make use of a new manifest flag:

If not declared, the default value is TRUE. All apps behave as before: there are no default restrictions in using HTTP.

Then, when the app starts, the following code is run on the ActivityThread class, setting a NetworkSecurityPolicy for the application.

#####NetworkSecurityPolicy android.security.NetworkSecurityPolicy is a new class used to set the “network policy” of the application. This policy system seems very similar to Apple’s App Transport Security but it currently holds just this one boolean flag ( usesCleartextTraffic ).

I can’t describe how this works better than the commit message itself:

#####Caveats As Google’s documentation & commit messages mention in many places, this is, for now, a best-effort system. This means that a developer may declare that it doesn’t want any cleartext traffic, but only certain system components will honour this.

The following components have been updated so that they honour the network security policy set for the application:

The documentation mentions that WebViews and HttpURLConnection also honour the flag, but I can’t seem to find evidence yet.

#####Thoughts As expected, this is a very recent addition to the code and is still a bit immature. I believe it is a step in the right direction for Android; to be honest I wasn’t expecting something like this to be implemented. I think it will get more mature in future Android versions. I believe that developers will eventuall be able to implement nice things like domain restrictions, whitelisting, requirements for certain certificates (pinning) per domain etc through the new NetworkSecurityPolicy class. As it stands however, this has the potential to create quite a few issues for developers. If a developer decides to enable it, presumably all cleartext traffic will be blocked. This will include traffic from advertisement libraries until (if) they are updated to HTTPS. Apple’s ATS system is more granular: It can allows developers to declare that comms for specific hosts need to be secure by default. This way, an app can be certain that comms with certain backends are secure but still let possibly insecure ads go through.

######How does it work under the hood? After some quick browsing around the code, it looks like the StrictMode connection inspection feature works through the NetworkManagementService (netd). As stated in the commit message: > Detection is done by looking for a well-known TLS handshake header; it’s not future proof, but it’s a good start. Handles both IPv4 and IPv6

For those interested, the TLS handshake signatures can be found here.

mobile security, static & dynamic analysis, automation, payments

Источник

Android 8: Недоступен HTTP-трафик Cleartext

У меня были сообщения от пользователей с Android 8, что мое приложение (использующее back-end feed) не показывает контент. После расследования я обнаружил, что Exception происходит на Android 8:

(Я удалил имя пакета, URL и другие возможные идентификаторы)

ОТВЕТЫ

Ответ 1

Начиная с Android 9 (уровень API 28), поддержка открытого текста по умолчанию отключена.

Целевая песочница для этого приложения. Чем выше номер версии песочницы, тем выше уровень безопасности. Его значение по умолчанию равно 1; Вы также можете установить его на 2. Установка этого атрибута на 2 переключает приложение в другую изолированную программную среду SELinux. Следующие ограничения применяются к песочнице уровня 2:

Если у вас есть android:targetSandboxVersion в уменьшите его до 1

Ответ 2

В AndroidManifest я нашел этот параметр:

Читайте также:  какие типы трансмиссии применяются в современных строительных машинах

и @xml/network_security_config определены в network_security_config.xml как:

только что я изменил cleartextTrafficPermitted на true

Ответ 3

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

В build.gradle:

В теге приложения в AndroidManifest.xml

Ответ 4

Моя проблема в Android 9 заключалась в навигации по веб-сайтам по доменам с http. Решение из этого ответа

Ответ 5

Измените ваш URL с HTTP на HTTPS ;

Ответ 6

В приведенном выше предложении я предоставлял свой URL как http://xyz.abc.com/mno/

Я изменил это на xyz.abc.com, после чего он начал работать.

Ответ 7

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

Ответ 8

Это может быть полезно для кого-то.

Недавно у нас была такая же проблема для Android 9, но нам нужно было отображать некоторые URL-адреса в WebView, ничего особенного. Поэтому добавление android:usesCleartextTraffic=»true» для Manifest работал, но мы не хотели нарушать безопасность всего приложения для этого. Таким образом, исправление заключалось в изменении ссылок с http на https

Ответ 9

Хорошо, это ⇒⇒ НЕ repeat тысячи повторений добавления его в ваш манифест, но подсказка, которая основывается на этом, но дает вам дополнительное преимущество (и, возможно, некоторую справочную информацию).

Android имеет своего рода функцию перезаписи для src-Directory.

По умолчанию у вас есть

Но вы можете добавить дополнительные каталоги, чтобы перезаписать ваш AndroidManifest.xml. Вот как это работает:

Внутри этого файла вам не нужно помещать в него все правила, а только те, которые вы хотите перезаписать из вашего /app/src/main/AndroidManifest.xml

Вот пример того, как это выглядит для запрошенного CLEARTEXT-Permission:

С этим знанием теперь легко, как 1,2,3, перегрузить ваши разрешения в зависимости от вашей отладки | главная | освободить окружающую среду.

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

Ответ 10

Для проектов React Native

Это было уже исправлено на RN 0,59. Вы можете найти при обновлении diff с 0.58.6 до 0.59. Вы можете применить его без обновления версии RN, выполнив следующие действия:

Проверьте принятый ответ, чтобы узнать причину.

Ответ 11

Указывает целевую песочницу, которую приложение хочет использовать. Более высокие версии sanbox будут иметь повышенный уровень безопасности.

Значение по умолчанию для этого атрибута равно 1.

Очевидно, это также добавляет новый уровень безопасности, по крайней мере, на Android 8.

Ответ 12

Добавьте это свойство только в свои заявления

Ответ 13

Ответ 14

Разумеется, необходимо интернет-разрешение (дух..):

Затем в своем подклассе Application (при необходимости создайте его) вы можете добавить NetworkSecurityConfig со ссылкой на файл Resources/xml/ZZZZ.xml :

Создайте файл в папке Resources/xml (при необходимости создайте папку xml ).

Вы также можете использовать параметр UsesCleartextTraffic в ApplicationAttribute :

Ответ 15

Я также получил ту же ошибку «HTTP-трафик в незашифрованном виде запрещен» при разработке моего приложения. Я использую Retrofit2 для сетевых вызовов в моем приложении, и у меня есть две проектные среды (разработка и производство). Мой производственный домен имеет сертификат SSL с вызовами HTTPS, а у dev не будет https. Конфигурация добавлена в версии сборки. Но когда я перехожу на dev, эта проблема сработает. Поэтому я добавил ниже решение для этого.

Я добавил открытый трафик в манифест

Затем я добавил спецификацию соединения во время создания класса конфигурации OKHttp.

Полное создание OkHttpClient приведено ниже

Ответ 16

Измените ваш URL с HTTP на HTTPS;

Ответ 17

добавление этого параметра в заголовок решило мою проблему в ApiSauce React Native

Ответ 18

Обновление до React Native 0.58.5 или выше. У них есть includeSubdomain в их файлах конфигурации в RN 0.58.5.

В Rn 0.58.5 они объявили network_security_config со своим доменом сервера. Конфигурация безопасности сети позволяет приложению разрешать трафик открытым текстом из определенного домена. Поэтому не нужно прилагать дополнительных усилий, объявив android:usesCleartextTraffic=»true» в теге приложения вашего файла манифеста. Это будет решено автоматически после обновления версии RN.

Ответ 19

Ответ 20

После изменения API версии 9.0 получение сообщения об ошибке HTTP в открытом виде в YOUR-API.DOMAIN.COM не разрешено (targetSdkVersion = «28»). в xamarin, xamarin.android и андроид студии.

Два шага для устранения этой ошибки в xamarin, xamarin.android и android studio.

Шаг 1. Создайте файловые ресурсы /xml/network_security_config.xml

Добавьте android: networkSecurityConfig = «@xml/network_security_config» в тег приложения. например:

Ответ 21

В моем случае этот URL также не работает в браузере.

Источник

Информ портал о технике и не только