7

Próbuję zrozumieć i naprawić przyczynę odrzucenia mojej aplikacji. Wiem, że chodzi o protokół SSL, ale nie mogę znaleźć zależności, która ją powoduje. używam następnego Setup:Konsola programisty Google Play odrzuciła moją aktualizację aplikacji

  1. Android N (24)
  2. Fabric.
  3. MixPanel.
  4. Quickblox.
  5. Crashlytics
  6. Analityka.

Każda pomoc zostanie doceniona.


Aktualizacja: To z Sekcji alarmów

alert bezpieczeństwa

aplikacja ma niebezpiecznego realizację obsługi WebViewClient.onReceivedSslError. Konkretnie, implementacja ignoruje wszystkie błędy sprawdzania certyfikatu SSL, przez co twoja aplikacja jest podatna na ataki typu "man-in-the-middle". Osoba atakująca może zmienić treść WebView, odczytywać przesyłane dane (takie jak dane logowania) i wykonać kod w aplikacji przy użyciu JavaScript. Aby poprawnie obsłużyć sprawdzanie poprawności certyfikatu SSL, zmień kod, aby wywoływał SslErrorHandler.proceed(), gdy certyfikat przedstawiony przez serwer spełnia twoje oczekiwania, i wywołaj SslErrorHandler.cancel() w przeciwnym razie. Powiadomienie e-mail zawierające aplikacje i klasy (y), których dotyczy problem, zostało wysłane na adres Twojego konta programisty. Prosimy o usunięcie tej luki, najszybciej jak to możliwe, i zwiększ numer wersji uaktualnionego pakietu APK. Aby uzyskać więcej informacji na temat procedury obsługi błędów SSL, zapoznaj się z naszą dokumentacją w Centrum pomocy dla programistów. W przypadku innych pytań technicznych możesz wysłać wiadomość pod numer https://www.stackoverflow.com/questions i użyć tagów "android-security" i "SslErrorHandler". Jeśli korzystasz z biblioteki innej firmy, która jest za to odpowiedzialna, poinformuj o tym osobę trzecią i weź z nią współpracę, aby rozwiązać problem. . Aby potwierdzić, że zaktualizowałeś się poprawnie, prześlij zaktualizowaną wersję do Konsoli programisty i sprawdź po pięciu godzinach. Jeśli aplikacja nie została poprawnie zaktualizowana, wyświetlimy ostrzeżenie. Należy pamiętać, że chociaż te konkretne problemy mogą nie mieć wpływu na każdą aplikację korzystającą z protokołu WebView SSL, najlepiej jest na bieżąco aktualizować wszystkie poprawki zabezpieczeń. Aplikacje z lukami w zabezpieczeniach, które narażają użytkowników na ryzyko naruszenia zabezpieczeń, mogą zostać uznane za naruszenie naszych zasad dotyczących złośliwych zachowań i sekcji 4.4 Umowy dystrybucyjnej dla programistów. Upewnij się, że wszystkie opublikowane aplikacje są zgodne z Umową dystrybucyjną dla programistów i Zasadami programu dla programistów. Jeśli masz pytania lub wątpliwości, skontaktuj się z naszym zespołem pomocy za pośrednictwem Centrum pomocy dla programistów Google Play. Wpływa na wersję APK 2.

+0

Czy otrzymujesz komunikat "Twoja aplikacja używa niebezpiecznej implementacji komunikatu X509TrustManager [...]"? Jeśli tak, opublikuję poprawkę. Jeśli nie, podaj, jaką wiadomość otrzymałeś jako przyczynę odrzucenia aplikacji. – thomaspsk

+0

Zwykle chciałbyś krok po kroku przejść do tego, usuwając zależności, a następnie dodając je z powrotem jeden po drugim, aby upewnić się, że udało Ci się złapać źródło problemu. – Eenvincible

+1

Zobacz http://stackoverflow.com/questions/36050741/ webview-avoid-security-alert-from-google-play-on-implementation-of-onreceiveds – StarsSky

Odpowiedz

1

Problem był BackEndless po aktualizacji wersji naprawiła go.

+0

możesz wyjaśnić to bardziej szczegółowo? –

1

Należy zaktualizować program obsługi webViewClient w sposób opisany poniżej. Jeśli w swojej aplikacji nie korzystasz z przeglądarki internetowej onReceivedSslError(), sprawdź, czy używasz najnowszej wersji pakietu SDK, aby uzyskać zaktualizowaną wersję zgodnie z nową polityką bezpieczeństwa Google.

Aby poprawnie obsłużyć sprawdzanie poprawności certyfikatu SSL, zmień kod, aby wywołać SslErrorHandler.proceed(), gdy certyfikat przedstawiony przez serwer spełnia twoje oczekiwania, i wywołaj SslErrorHandler.cancel() w przeciwnym razie.

Na przykład dodaję okno dialogowe z ostrzeżeniem, aby użytkownik potwierdził i wydaje się, że Google nie wyświetla już ostrzeżenia.

@Override 
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    String message = "SSL Certificate error."; 
     switch (error.getPrimaryError()) { 
      case SslError.SSL_UNTRUSTED: 
       message = "The certificate authority is not trusted."; 
       break; 
      case SslError.SSL_EXPIRED: 
       message = "The certificate has expired."; 
       break; 
      case SslError.SSL_IDMISMATCH: 
       message = "The certificate Hostname mismatch."; 
       break; 
      case SslError.SSL_NOTYETVALID: 
       message = "The certificate is not yet valid."; 
       break; 
     } 
     message += " Do you want to continue anyway?"; 

     builder.setTitle("SSL Certificate Error"); 
     builder.setMessage(message); 
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      handler.proceed(); 
     } 
    }); 
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      handler.cancel(); 
     } 
    }); 
    final AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

Po tych zmianach nie będzie wyświetlane ostrzeżenie.