Как разрешить открытый текст, не разрешенный в aosp - PullRequest
2 голосов
/ 18 марта 2020

Я знаю, что открытый текст по умолчанию был отключен android. Могу ли я узнать, где именно я могу включить в aosp вместо добавления во всех пакетах с файлами конфигурации сети?

Где я могу разрешить, добавив строку ниже?

cleartextTrafficPermitted = "true

external / okhttp / android / main / java / com / squareup / okttp / Handler

 public static OkUrlFactory createHttpOkUrlFactory(Proxy proxy) {
        OkHttpClient client = new OkHttpClient();

        // Explicitly set the timeouts to infinity.
        client.setConnectTimeout(0, TimeUnit.MILLISECONDS);
        client.setReadTimeout(0, TimeUnit.MILLISECONDS);
        client.setWriteTimeout(0, TimeUnit.MILLISECONDS);

        // Set the default (same protocol) redirect behavior. The default can be overridden for
        // each instance using HttpURLConnection.setInstanceFollowRedirects().
        client.setFollowRedirects(HttpURLConnection.getFollowRedirects());

        // Do not permit http -> https and https -> http redirects.
        client.setFollowSslRedirects(false);

        // Permit cleartext traffic only (this is a handler for HTTP, not for HTTPS).
        client.setConnectionSpecs(CLEARTEXT_ONLY);

        // When we do not set the Proxy explicitly OkHttp picks up a ProxySelector using
        // ProxySelector.getDefault().
        if (proxy != null) {
            client.setProxy(proxy);
        }

        // OkHttp requires that we explicitly set the response cache.
        OkUrlFactory okUrlFactory = new OkUrlFactory(client);

        // Use the installed NetworkSecurityPolicy to determine which requests are permitted over
        // http.
        OkUrlFactories.setUrlFilter(okUrlFactory, CLEARTEXT_FILTER);

        ResponseCache responseCache = ResponseCache.getDefault();
        if (responseCache != null) {
            AndroidInternal.setResponseCache(okUrlFactory, responseCache);
        }
        return okUrlFactory;
    }

    private static final class CleartextURLFilter implements URLFilter {
        @Override
        public void checkURLPermitted(URL url) throws IOException {
            String host = url.getHost();
            if (!NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(host)) {
                throw new IOException("Cleartext HTTP traffic to " + host + " not permitted");
            }
        }
    }

В любых приложениях, если я использую http, Я получаю сообщение об ошибке, так как HTTP-трафик Cleartext c до 124.60.5.6 не разрешен ";

Таким образом, возможно ли изменение в приложениях в aosp?

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Похоже, этого достаточно, если вы введете

builder.setCleartextTrafficPermitted(true);

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

источник: https://android.googlesource.com/platform/frameworks/base.git/+/refs/heads/master/core/java/android/security/net/config/NetworkSecurityConfig.java#189


Старый ответ

Я надеюсь, что вы выполнили свою домашнюю работу по поводу последствий обхода функции безопасности. При этом класс, ответственный за исключение, находится в фреймворке с пакетом android.security.net.config, а класс ответственности - NetworkSecurityConfig.

На момент написания этого ответа класс строителя stati c имел свойство boolean mCleartextTrafficPermittedSet, которое по умолчанию установлено на false. Возможно, вам придется установить значение по умолчанию true, что делает метод getEffectiveCleartextTrafficPermitted() в классе NetworkSecurityConfig, возвращающим mCleartextTrafficPermitted, который в свою очередь возвращает DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED, который по умолчанию установлен в true

. поток будет

getEffectiveCleartextTrafficPermitted() возвращает mCleartextTrafficPermitted возвращает DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED возвращает true по умолчанию.

Если все это сбивает с толку, вызывайте setCleartextTrafficPermitted(true) на сборщике всякий раз, когда сборщик создал.

Источник для класса доступен здесь: https://android.googlesource.com/platform/frameworks/base.git/+/refs/heads/master/core/java/android/security/net/config/NetworkSecurityConfig.java

Примечание : я не пробовал это и просто прошел через источник и сделал вывод о вышеизложенном. Вы можете попытаться исправить меня, если что-то не так.

Редактирование путем обновления из @Shadow:

В NetworkSecurityConfig измените логическую переменную с true на false.

   //public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = true;
    public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = false;

Также в ManifestConfigSource прокомментируйте следующую строку

  /*boolean usesCleartextTraffic =
                        (mApplicationInfo.flags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0
                        && mApplicationInfo.targetSandboxVersion < 2;*/

и применяется напрямую, как используетCleartextTraffi c как true.

 boolean usesCleartextTraffic =true;
1 голос
/ 25 марта 2020

Вам нужно от go до AndroidManifest.xml и добавить

<application
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config"
    ....
</application>

Я настоятельно советую вам создать network_security_config, чтобы разрешить только свой домен и поддомен. Вот быстрый учебник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...