SafetyNet Safe Browsing API

Die SafetyNet Safe Browsing API ist eine Bibliothek, die von den Google Play-Diensten unterstützt wird. Sie bietet Dienste, mit denen ermittelt werden kann, ob eine URL von Google als bekannte Bedrohung gekennzeichnet wurde.

Ihre App kann mit dieser API ermitteln, ob eine bestimmte URL von Google als bekannte Bedrohung eingestuft wurde. Intern implementiert SafetyNet einen Client für das von Google entwickelte Safe Browsing Network Protocol v4. Sowohl der Clientcode als auch das Netzwerkprotokoll v4 wurden entwickelt, um die Privatsphäre der Nutzer zu schützen und den Akku- und Bandbreitenverbrauch auf ein Minimum zu beschränken. Mit dieser API können Sie den Safe Browsing-Dienst von Google unter Android so ressourcenoptimiert wie möglich nutzen, ohne das Netzwerkprotokoll zu implementieren.

In diesem Dokument wird erläutert, wie Sie mit der SafetyNet Safe Browsing Lookup API eine URL auf bekannte Bedrohungen prüfen.

Nutzungsbedingungen

Durch die Verwendung der Safe Browsing API stimmen Sie den Nutzungsbedingungen zu. Lesen Sie sich alle anwendbaren Nutzungsbedingungen und Richtlinien durch, bevor Sie auf die Safe Browsing API zugreifen.

Android API-Schlüssel anfordern und registrieren

Bevor Sie die Safe Browsing API verwenden können, müssen Sie einen Android API-Schlüssel erstellen und registrieren. Eine genaue Anleitung finden Sie auf der Seite zu den ersten Schritten mit Safe Browsing.

SafetyNet API-Abhängigkeit hinzufügen

Bevor Sie die Safe Browsing API verwenden können, müssen Sie Ihrem Projekt die SafetyNet API hinzufügen. Wenn Sie Android Studio verwenden, fügen Sie diese Abhängigkeit der Gradle-Datei auf App-Ebene hinzu. Weitere Informationen finden Sie unter Mit SafetyNet vor Sicherheitsbedrohungen schützen.

API initialisieren

Wenn Sie die Safe Browsing API verwenden möchten, müssen Sie sie initialisieren, indem Sie initSafeBrowsing() aufrufen und warten, bis der Vorgang abgeschlossen ist. Das folgende Code-Snippet dient als Beispiel:

Kotlin

Tasks.await(SafetyNet.getClient(this).initSafeBrowsing())

Java

Tasks.await(SafetyNet.getClient(this).initSafeBrowsing());

URL-Prüfung beantragen

Ihre App kann mithilfe einer URL-Prüfung feststellen, ob eine URL eine bekannte Bedrohung darstellt. Einige Bedrohungstypen sind für Ihre Anwendung möglicherweise nicht von Interesse. Mit der API können Sie auswählen, welche Bedrohungstypen für Ihre Anforderungen wichtig sind. Sie können mehrere bekannte Bedrohungsarten angeben.

URL-Prüfungsanfrage senden

Die API ist unabhängig vom verwendeten Schema. Sie können die URL also mit oder ohne Schema übergeben. Beispielsweise

Kotlin

var url = "https://www.google.com"

Java

String url = "https://www.google.com";

und

Kotlin

var url = "www.google.com"

Java

String url = "www.google.com";

sind gültig.

Der folgende Code zeigt, wie eine URL-Überprüfungsanfrage gesendet wird:

Kotlin

SafetyNet.getClient(this).lookupUri(
       url,
       SAFE_BROWSING_API_KEY,
       SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
       SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING
)
       .addOnSuccessListener(this) { sbResponse ->
           // Indicates communication with the service was successful.
           // Identify any detected threats.
           if (sbResponse.detectedThreats.isEmpty()) {
               // No threats found.
           } else {
               // Threats found!
           }
       }
       .addOnFailureListener(this) { e: Exception ->
           if (e is ApiException) {
               // An error with the Google Play Services API contains some
               // additional details.
               Log.d(TAG, "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")

               // Note: If the status code, s.statusCode,
               // is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
               // you need to call initSafeBrowsing(). It means either you
               // haven't called initSafeBrowsing() before or that it needs
               // to be called again due to an internal error.
           } else {
               // A different, unknown type of error occurred.
               Log.d(TAG, "Error: ${e.message}")
           }
       }

Java

SafetyNet.getClient(this).lookupUri(url,
         SAFE_BROWSING_API_KEY,
         SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
         SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING)
   .addOnSuccessListener(this,
       new OnSuccessListener<SafetyNetApi.SafeBrowsingResponse>() {
           @Override
           public void onSuccess(SafetyNetApi.SafeBrowsingResponse sbResponse) {
               // Indicates communication with the service was successful.
               // Identify any detected threats.
               if (sbResponse.getDetectedThreats().isEmpty()) {
                   // No threats found.
               } else {
                   // Threats found!
               }
        }
   })
   .addOnFailureListener(this, new OnFailureListener() {
           @Override
           public void onFailure(@NonNull Exception e) {
               // An error occurred while communicating with the service.
               if (e instanceof ApiException) {
                   // An error with the Google Play Services API contains some
                   // additional details.
                   ApiException apiException = (ApiException) e;
                   Log.d(TAG, "Error: " + CommonStatusCodes
                       .getStatusCodeString(apiException.getStatusCode()));

                   // Note: If the status code, apiException.getStatusCode(),
                   // is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
                   // you need to call initSafeBrowsing(). It means either you
                   // haven't called initSafeBrowsing() before or that it needs
                   // to be called again due to an internal error.
               } else {
                   // A different, unknown type of error occurred.
                   Log.d(TAG, "Error: " + e.getMessage());
               }
           }
   });

Antwort der URL-Prüfung lesen

Rufen Sie mithilfe des zurückgegebenen Objekts SafetyNetApi.SafeBrowsingResponse die zugehörige Methode getDetectedThreats() auf. Sie gibt eine Liste von SafeBrowsingThreat-Objekten zurück. Wenn die zurückgegebene Liste leer ist, wurden von der API keine bekannten Bedrohungen erkannt. Wenn die Liste nicht leer ist, rufen Sie getThreatType() für jedes Element in der Liste auf, um zu ermitteln, welche bekannten Bedrohungen von der API erkannt wurden.

Vorschläge für Warntexte finden Sie im Entwicklerleitfaden zur Safe Browsing API.

Interessante Bedrohungstypen angeben

Die Konstanten in der Klasse SafeBrowsingThreat enthalten die derzeit unterstützten Bedrohungstypen:

Bedrohungstyp Definition
TYPE_POTENTIALLY_HARMFUL_APPLICATION Bei diesem Bedrohungstyp werden URLs von Seiten identifiziert, die als potenziell schädliche Anwendungen gekennzeichnet sind.
TYPE_SOCIAL_ENGINEERING Dieser Bedrohungstyp identifiziert URLs von Seiten, die als Social Engineering-Bedrohungen gekennzeichnet sind.

Wenn Sie die API verwenden, fügen Sie Konstanten für den Bedrohungstyp als Argumente hinzu. Sie können Ihrer App beliebig viele Konstanten für den Bedrohungstyp hinzufügen. Sie dürfen jedoch nur Konstanten verwenden, die nicht als veraltet gekennzeichnet sind.

Safe Browsing-Sitzung beenden

Wenn Ihre App die Safe Browsing API für einen längeren Zeitraum nicht verwenden muss, prüfen Sie alle erforderlichen URLs in Ihrer App und beenden Sie dann die Safe Browsing-Sitzung mit der Methode shutdownSafeBrowsing():

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

Java

SafetyNet.getClient(this).shutdownSafeBrowsing();

Wir empfehlen, shutdownSafeBrowsing() in der Methode onPause() Ihrer Aktivität und initSafeBrowsing() in der Methode onResume() Ihrer Aktivität aufzurufen. Achten Sie jedoch darauf, dass initSafeBrowsing() vollständig ausgeführt wurde, bevor Sie lookupUri() aufrufen. Indem Sie dafür sorgen, dass Ihre Sitzungen immer aktuell sind, verringern Sie die Wahrscheinlichkeit interner Fehler in Ihrer App.

Von der SafetyNet Safe Browsing API erhobene Daten

Die SafetyNet Safe Browsing API erhebt automatisch die folgenden Daten, wenn sie unter Android mit dem Safe Browsing-Dienst kommuniziert:

Daten Beschreibung
App-Aktivitäten Erfasst das Hash-Präfix von URLs nach einer lokalen Hash-Präfixübereinstimmung, um schädliche URLs zu erkennen.

Wir möchten so transparent wie möglich sein. Du bist aber selbst dafür verantwortlich, das Formular für den Abschnitt zur Datensicherheit von Google Play in Bezug auf die Erhebung, Weitergabe und Sicherheit von Nutzerdaten in deiner App auszufüllen.