L'API SafetyNet Navigazione sicura, una libreria fornita da Google Play Services, fornisce servizi per determinare se un URL è stato contrassegnato come minaccia nota da Google.
La tua app può utilizzare questa API per determinare se un determinato URL è stato classificato da Google come minaccia nota. Internamente, SafetyNet implementa un client per il protocollo di rete di Navigazione sicura v4 sviluppato da Google. Sia il codice client che il protocollo di rete v4 sono stati progettati per preservare la privacy degli utenti e mantenere al minimo il consumo di batteria e larghezza di banda. Utilizza questa API per sfruttare appieno il servizio Navigazione sicura su Android di Google nel modo più ottimizzato in termini di risorse, senza implementare il relativo protocollo di rete.
Questo documento spiega come utilizzare l'API SafetyNet Navigazione sicura Lookup per controllare un URL al fine di individuare minacce note.
Termini di servizio
Se utilizzi l'API Navigazione sicura, accetti di essere vincolato dai Termini di servizio. Leggi e comprendi tutti i termini e le norme applicabili prima di accedere all'API Navigazione sicura.
Richiedere e registrare una chiave API Android
Prima di utilizzare l'API Navigazione sicura, crea e registra una chiave API Android. Per conoscere la procedura specifica, consulta la pagina relativa alla guida introduttiva a Navigazione sicura.
Aggiungi la dipendenza dell'API SafetyNet
Prima di utilizzare l'API Navigazione sicura, aggiungi l'API SafetyNet al tuo progetto. Se usi Android Studio, aggiungi questa dipendenza al file Gradle a livello di app. Per ulteriori informazioni, consulta la pagina Proteggere dalle minacce alla sicurezza con SafetyNet.
Inizializzare l'API
Per utilizzare l'API Navigazione sicura, devi inizializzare l'API chiamando
initSafeBrowsing()
e aspettando che venga completata. Il seguente snippet di codice fornisce un esempio:
Kotlin
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing())
Java
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing());
Richiedi un controllo degli URL
L'app può utilizzare un controllo degli URL per determinare se un URL rappresenta una minaccia nota. Alcuni tipi di minacce potrebbero non interessare la tua app specifica. L'API consente di scegliere i tipi di minacce importanti per le tue esigenze. Puoi specificare più tipi di minacce note.
Invia la richiesta di controllo dell'URL
L'API è indipendente dallo schema utilizzato, quindi puoi passare l'URL con o senza uno schema. Ad esempio, sia
Kotlin
var url = "https://www.google.com"
Java
String url = "https://www.google.com";
e
Kotlin
var url = "www.google.com"
Java
String url = "www.google.com";
sono validi.
Il seguente codice mostra come inviare una richiesta di verifica dell'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()); } } });
Leggi la risposta del controllo URL
Utilizzando l'oggetto SafetyNetApi.SafeBrowsingResponse
restituito, chiama il metodo getDetectedThreats()
, che restituisce un elenco di oggetti SafeBrowsingThreat
. Se l'elenco restituito è vuoto, l'API non ha rilevato minacce note.
Se l'elenco non è vuoto, chiama getThreatType()
su ogni elemento dell'elenco per determinare quali minacce note sono state rilevate dall'API.
Per visualizzare il linguaggio di avviso suggerito, consulta la Guida per gli sviluppatori dell'API Navigazione sicura.
Specifica i tipi di minacce di interesse
Le costanti nella classe SafeBrowsingThreat
contengono i tipi di minacce attualmente supportati:
Tipo di minaccia | Definizione |
---|---|
TYPE_POTENTIALLY_HARMFUL_APPLICATION |
Questo tipo di minaccia identifica gli URL delle pagine che contengono applicazioni potenzialmente dannose. |
TYPE_SOCIAL_ENGINEERING |
Questo tipo di minaccia identifica gli URL delle pagine segnalate come contenenti minacce di ingegneria sociale. |
Quando utilizzi l'API, aggiungi costanti dei tipi di minaccia come argomenti. Puoi aggiungere tutte le costanti di tipo di minaccia richieste dalla tua app, ma puoi utilizzare solo le costanti non contrassegnate come deprecate.
Chiusura della sessione di Navigazione sicura
Se la tua app non ha bisogno di utilizzare l'API Navigazione sicura per un periodo prolungato, controlla tutti gli URL necessari nell'app e poi interrompi la sessione di Navigazione sicura utilizzando il metodo shutdownSafeBrowsing()
:
Kotlin
SafetyNet.getClient(this).shutdownSafeBrowsing()
Java
SafetyNet.getClient(this).shutdownSafeBrowsing();
Ti consigliamo di chiamare shutdownSafeBrowsing()
nel metodo onPause()
dell'attività e di chiamare initSafeBrowsing()
nel metodo onResume()
dell'attività. Tuttavia, assicurati che l'esecuzione di initSafeBrowsing()
sia terminata prima di chiamare lookupUri()
.
Facendo in modo che la sessione sia sempre
aggiornata, riduci la possibilità di errori interni nell'app.
Dati raccolti dall'API Navigazione sicura SafetyNet
L'API Navigazione sicura SafetyNet raccoglie automaticamente i seguenti dati quando comunica con il servizio Navigazione sicura su Android:
Dati | Descrizione |
---|---|
Attività dell'app | Raccoglie il prefisso hash degli URL dopo la corrispondenza di un prefisso hash locale al fine di rilevare gli URL dannosi. |
Cerchiamo di essere il più trasparenti possibile, ma è tua esclusiva responsabilità decidere come rispondere al modulo relativo alla sezione Sicurezza dei dati di Google Play in merito alle misure di raccolta, condivisione e sicurezza dei dati utente della tua app.