L'API SafetyNet Safe Browsing, une bibliothèque fournie par les services Google Play, propose des services permettant de déterminer si une URL a été marquée comme menace connue par Google.
Votre application peut utiliser cette API pour déterminer si une URL particulière a été classée par Google comme menace connue. En interne, SafetyNet met en œuvre un client pour la version 4 du protocole réseau de navigation sécurisée développé par Google. Le code client et la version 4 du protocole réseau ont tous deux été conçus pour préserver la confidentialité des utilisateurs et pour réduire au maximum l'utilisation de la batterie et de la bande passante. Utilisez cette API pour tirer pleinement parti du service de navigation sécurisée de Google sur Android de la manière la plus optimisée en termes de ressources, sans implémenter son protocole réseau.
Ce document explique comment utiliser l'API SafetyNet Safe Browsing Lookup pour rechercher des menaces connues dans une URL.
Conditions d'utilisation
En utilisant l'API Safe Browsing, vous acceptez de respecter les conditions d'utilisation. Veuillez lire attentivement l'ensemble des conditions d'utilisation et des règles applicables avant d'accéder à l'API Safe Browsing.
Demander et enregistrer une clé API Android
Avant d'utiliser l'API Safe Browsing, créez et enregistrez une clé API Android. Pour connaître la procédure à suivre, consultez Premiers pas avec la navigation sécurisée.
Ajouter la dépendance de l'API SafetyNet
Avant d'utiliser l'API Safe Browsing, ajoutez-la à votre projet. Si vous utilisez Android Studio, ajoutez cette dépendance à votre fichier Gradle au niveau de l'application. Pour en savoir plus, consultez Se protéger contre les menaces de sécurité avec SafetyNet.
Initialiser l'API
Pour utiliser l'API Safe Browsing, vous devez l'initialiser en appelant initSafeBrowsing()
et en attendant que l'opération se termine. L'extrait de code suivant fournit un exemple :
Kotlin
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing())
Java
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing());
Demander une vérification d'URL
Votre application peut utiliser une vérification d'URL pour déterminer si une URL présente une menace connue. Certains types de menaces ne présentent pas d'intérêt pour votre application. L'API vous permet de choisir les types de menaces importants pour vos besoins. Vous pouvez spécifier plusieurs types de menaces connus.
Envoyer la requête de vérification d'URL
L'API est indépendante du schéma utilisé. Vous pouvez donc transmettre l'URL avec ou sans schéma. Par exemple,
Kotlin
var url = "https://www.google.com"
Java
String url = "https://www.google.com";
et
Kotlin
var url = "www.google.com"
Java
String url = "www.google.com";
sont tous deux valides.
Le code suivant montre comment envoyer une requête de vérification d'URL :
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()); } } });
Lire la réponse de la vérification d'URL
À l'aide de l'objet SafetyNetApi.SafeBrowsingResponse
renvoyé, appelez sa méthode getDetectedThreats()
, qui renvoie une liste d'objets SafeBrowsingThreat
. Si la liste renvoyée est vide, cela signifie que l'API n'a détecté aucune menace connue.
Si la liste n'est pas vide, appelez getThreatType()
sur chaque élément de la liste pour déterminer quelles menaces connues ont été détectées par l'API.
Pour afficher le langage d'avertissement suggéré, consultez le guide du développeur de l'API Safe Browsing.
Spécifier les types de menaces intéressants
Les constantes de la classe SafeBrowsingThreat
contiennent les types de menaces actuellement pris en charge :
Type de menace | Définition |
---|---|
TYPE_POTENTIALLY_HARMFUL_APPLICATION |
Ce type de menace identifie les URL des pages signalées comme contenant des applications potentiellement dangereuses. |
TYPE_SOCIAL_ENGINEERING |
Ce type de menace identifie les URL des pages signalées comme contenant des menaces d'ingénierie sociale. |
Lorsque vous utilisez l'API, vous ajoutez des constantes de type de menace en tant qu'arguments. Vous pouvez ajouter autant de constantes de type de menace que nécessaire à votre application, mais vous ne pouvez utiliser que des constantes qui ne sont pas marquées comme obsolètes.
Fermer votre session de navigation sécurisée
Si votre application n'a pas besoin d'utiliser l'API Safe Browsing pendant une période prolongée, vérifiez toutes les URL nécessaires, puis fermez votre session de navigation sécurisée à l'aide de la méthode shutdownSafeBrowsing()
:
Kotlin
SafetyNet.getClient(this).shutdownSafeBrowsing()
Java
SafetyNet.getClient(this).shutdownSafeBrowsing();
Nous vous recommandons d'appeler shutdownSafeBrowsing()
dans la méthode onPause()
de votre activité et d'appeler initSafeBrowsing()
dans la méthode onResume()
de votre activité. Toutefois, assurez-vous que l'exécution de initSafeBrowsing()
est terminée avant d'appeler lookupUri()
.
En vous assurant que votre session est toujours à jour, vous réduisez le risque d'erreurs internes dans votre application.
Données collectées par l'API SafetyNet Safe Browsing
L'API SafetyNet Safe Browsing collecte automatiquement les données suivantes lorsqu'elle communique avec le service de navigation sécurisée sur Android :
Données | Description |
---|---|
Activité dans l'application | Collecte le préfixe de hachage des URL après une correspondance de préfixe de hachage local afin de détecter les URL malveillantes. |
Notre objectif est d'être le plus transparent possible. Toutefois, vous êtes seul responsable de vos réponses au formulaire Google Play sur la sécurité des données concernant la collecte et le partage des données utilisateur dans votre application, ainsi que vos pratiques de sécurité.