Android React Native App HostNameVerifier Ошибка из магазина Google Play

Пожалуйста, помогите, у меня есть следующая реализация в файле MainApplication.java. Я проверяю фиксированные имена хостов, а затем возвращаю true или false соответственно.

Ошибка Небезопасный верификатор имени хоста

Безопасность Ваше приложение использует небезопасную реализацию имени хоста верификатор. Подробнее см. в этой статье Справочного центра Google. включая срок устранения уязвимости.

Ld / а / а / а / а / с / е $ 1; Ld/a/a/a/a/c/f$1; ср: крайний срок: 10.12.2020

 @Override
  public void onCreate() {
    super.onCreate();
    hostnameVerifier();
    MobileCore.setApplication(this);
    SoLoader.init(this, /* native exopackage */ false);
    ReactNativeFirebaseApp.setApplicationContext(this);
  }

private void hostnameVerifier(){
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
      @Override
      public boolean verify(String arg0, SSLSession arg1) {
        String hostList[] = {"in.appcenter.ms", "graph.facebook.com",
            "assets.adobedtm.com", "codepushupdates.azureedge.net", "app-measurement.com",
            "forter.com", "dmn1", "dmn2", "dmn3", "quantummetric.com", "urbanairship.com", "demdex.net", "search.unbxd.io",
            "monetate.net", "bazaarvoice.com", "google.com", "stylitics.com", "getcandid.com","braintreegateway.com"
          };

          for (String host : hostList) {
            if (host.contains(arg0) || arg0.endsWith(host)) {
              return true;
            }
          }
        return false;
      }
    });
  }

Что мне изменить, пожалуйста, помогите.

Опубликуйте полную трассировку стека/сообщение об ошибке. Плохая реализация кстати. Используйте HashSet вместо массива, и вы можете выполнить проверку O (1) вместо O (n).

Gabe Sechan 18.12.2020 02:24

Спасибо за предложение будем работать над этим. Полная ошибка. Ваше приложение использует небезопасную реализацию проверки имени хоста. Подробности, в том числе крайний срок устранения уязвимости, см. в этой статье Справочного центра Google. Ld / а / а / а / а / с / е $ 1; Ld/a/a/a/a/c/f$1; ср: крайний срок: 10.12.2020

Novice 18.12.2020 02:28

Я не уверен, что это причина, но если посмотреть еще раз, ваша реализация небезопасна. Страница "mymalwaresite.com/google.com" будет пройдена. По крайней мере, вы должны разобрать строку в URL-адрес и проверить фактический хост, а не делать .contains()

Gabe Sechan 18.12.2020 02:46

Я попытался сделать проверку очень общей, удалив содержимое, но даже это не сработало, получил ту же ошибку. public boolean verify(String hostname, SSLSession arg1) { if (hostname.equalsIgnoreCase("domain")) { return true; } иначе { вернуть ложь; }

Novice 18.12.2020 05:50
1
4
688
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Предупреждение системы безопасности правильное. Ваш код подвергает пользователей риску и должен быть отклонен из App Store.

Зачем вообще нужен этот код? Удалите его и подключайтесь к серверам только после получения действительных сертификатов.

Ответ принят как подходящий

В консоли Google Play перейдите в «Управление выпусками» -> «Выбрать версию apk» -> вкладка «Безопасность». Там вы увидите список проблем безопасности с этим apk вместе с классом в вашем коде, который вызывает эту проблему безопасности, где это возможно.

Если вы не видите имя класса, а видите какой-то закодированный код в сообщении с предупреждением о безопасности, загрузите другую сборку, отключив любой инструмент сжатия кода, который вы, возможно, используете. В моем случае это был proguard, я его отключил и получил имя библиотеки. К вашему сведению — в моем случае библиотекой был Braintree.

Другие вопросы по теме