L'API Navigazione sicura di SafetyNet, una libreria basata su Google Play Services, fornisce servizi per determinare se un URL è stato contrassegnato da Google come una minaccia nota.
La tua app può utilizzare questa API per determinare se un determinato URL è stato classificato da Google come una minaccia nota. Internamente, SafetyNet implementa un client per il protocollo v4 di Navigazione sicura sviluppato da Google. Sia il codice client sia il protocollo di rete v4 sono progettati per preservare la privacy degli utenti e contenere al minimo il consumo di batteria e larghezza di banda. Utilizza questa API per sfruttare al meglio il servizio Navigazione sicura di Google su Android nel modo più ottimizzato per le risorse e senza implementare il relativo protocollo di rete.
Questo documento spiega come utilizzare l'API SafetyNet Navigazione sicura per verificare la presenza di minacce note in un URL.
Termini di servizio
Se utilizzi l'API Navigazione sicura, accetti di essere vincolato dai Termini di servizio. Prima di accedere all'API Safe Browsing, leggi e comprendi tutti i termini e le norme vigenti.
Richiedi e registra una chiave API per Android
Prima di utilizzare l'API Safe Browsing, crea e registra una chiave API Android. Per i passaggi specifici, consulta la pagina relativa alla guida introduttiva a Navigazione sicura.
Aggiungi la dipendenza dall'API SafetyNet
Prima di utilizzare l'API Navigazione sicura, aggiungi l'API SafetyNet al tuo progetto. Se utilizzi Android Studio, aggiungi questa dipendenza al file Gradle a livello di app. Per ulteriori informazioni, vedi Proteggersi dalle minacce alla sicurezza con SafetyNet.
Inizializzare l'API
Per utilizzare l'API Navigazione sicura, devi inizializzala chiamando
initSafeBrowsing()
e attendere il completamento. Il seguente snippet di codice fornisce un esempio:
Kotlin
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing())
Java
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing());
Richiedere il controllo di un URL
La tua app può utilizzare un controllo dell'URL per determinare se un URL rappresenta una minaccia nota. Alcuni tipi di minacce potrebbero non essere di interesse per la tua app specifica. L'API consente di scegliere quali tipi di minacce sono 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";
siano validi.
Il seguente codice mostra come inviare una richiesta di controllo 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 di controllo dell'URL
Utilizza l'oggetto
SafetyNetApi.SafeBrowsingResponse
restituito, chiama il suo
metodo
getDetectedThreats()
, che restituisce un elenco di
SafeBrowsingThreat
oggetti. Se l'elenco restituito è vuoto, l'API non ha rilevato alcuna minaccia nota.
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 testo dell'avviso suggerito, consulta la Guida per gli sviluppatori dell'API Navigazione sicura.
Specifica i tipi di minacce di tuo interesse
Le costanti della classe SafeBrowsingThreat
contengono i tipi di minacce attualmente supportati:
Tipo di minaccia | Definizione |
---|---|
TYPE_POTENTIALLY_HARMFUL_APPLICATION |
Questo tipo di minaccia identifica gli URL di pagine segnalate come contenenti 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 le costanti di tipo di minaccia come argomenti. Puoi aggiungere tutte le costanti di tipo di minaccia richieste dalla tua app, ma puoi utilizzare solo quelle non contrassegnate come ritirate.
Arrestare la sessione di Navigazione sicura
Se la tua app non deve utilizzare l'API Navigazione sicura per un periodo prolungato,
controlla tutti gli URL necessari all'interno dell'app e poi chiudi 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 invocare
lookupUri()
.
Assicurati che la sessione sia sempre aggiornata per ridurre la possibilità di errori interni nell'app.
Dati raccolti dall'API SafetyNet Navigazione sicura
L'API Navigazione sicura di SafetyNet raccoglie automaticamente i seguenti dati quando dialoga con il servizio Navigazione sicura su Android:
Dati | Descrizione |
---|---|
Attività nelle app | Raccoglie il prefisso hash degli URL dopo una corrispondenza del prefisso hash locale ai fini del rilevamento di URL dannosi. |
Cerchiamo di essere il più trasparenti possibili, ma sei l'unico responsabile della decisione su come rispondere al modulo della sezione Sicurezza dei dati di Google Play per quanto riguarda le modalità di raccolta, condivisione e sicurezza dei dati utente della tua app.