Пожалуйста, помогите, у меня есть следующая реализация в файле 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;
}
});
}
Что мне изменить, пожалуйста, помогите.
Спасибо за предложение будем работать над этим. Полная ошибка. Ваше приложение использует небезопасную реализацию проверки имени хоста. Подробности, в том числе крайний срок устранения уязвимости, см. в этой статье Справочного центра Google. Ld / а / а / а / а / с / е $ 1; Ld/a/a/a/a/c/f$1; ср: крайний срок: 10.12.2020
Я не уверен, что это причина, но если посмотреть еще раз, ваша реализация небезопасна. Страница "mymalwaresite.com/google.com" будет пройдена. По крайней мере, вы должны разобрать строку в URL-адрес и проверить фактический хост, а не делать .contains()
Я попытался сделать проверку очень общей, удалив содержимое, но даже это не сработало, получил ту же ошибку. public boolean verify(String hostname, SSLSession arg1) { if (hostname.equalsIgnoreCase("domain")) { return true; } иначе { вернуть ложь; }
Предупреждение системы безопасности правильное. Ваш код подвергает пользователей риску и должен быть отклонен из App Store.
Зачем вообще нужен этот код? Удалите его и подключайтесь к серверам только после получения действительных сертификатов.
В консоли Google Play перейдите в «Управление выпусками» -> «Выбрать версию apk» -> вкладка «Безопасность». Там вы увидите список проблем безопасности с этим apk вместе с классом в вашем коде, который вызывает эту проблему безопасности, где это возможно.
Если вы не видите имя класса, а видите какой-то закодированный код в сообщении с предупреждением о безопасности, загрузите другую сборку, отключив любой инструмент сжатия кода, который вы, возможно, используете. В моем случае это был proguard, я его отключил и получил имя библиотеки. К вашему сведению — в моем случае библиотекой был Braintree.
Опубликуйте полную трассировку стека/сообщение об ошибке. Плохая реализация кстати. Используйте HashSet вместо массива, и вы можете выполнить проверку O (1) вместо O (n).