A API SafetyNet Safe Browsing, uma biblioteca com tecnologia do Google Play Services, oferece serviços para determinar se um URL foi marcado como uma ameaça conhecida pelo Google.
Seu app pode usar essa API para determinar se um URL específico foi classificado pelo Google como ameaça conhecida. Internamente, a SafetyNet implementa um cliente para o protocolo de rede v4 da Navegação segura desenvolvido pelo Google. O código do cliente e o protocolo de rede v4 foram desenvolvidos para preservar a privacidade dos usuários e manter o consumo da bateria e da largura de banda em um nível mínimo. Use essa API para aproveitar ao máximo o serviço da Navegação segura do Google no Android da maneira mais otimizada possível para recursos e sem implementar o protocolo de rede.
Este documento explica como usar a API SafetyNet Safe Browsing Lookup para verificar se há ameaças conhecidas em um URL.
Termos de Serviço
Ao usar a API Safe Browsing, você aceita os Termos de Serviço. Leia e entenda todos os termos e políticas aplicáveis antes de acessar a API Safe Browsing.
Solicitar e registrar uma chave de API do Android
Antes de usar a API Safe Browsing, crie e registre uma chave de API para Android. Para etapas específicas, consulte a página sobre como usar a Navegação segura.
Adicionar a dependência da API SafetyNet
Antes de usar a API Safe Browsing, adicione a API SafetyNet ao seu projeto. Se você estiver usando o Android Studio, adicione essa dependência ao arquivo do Gradle no nível do app. Para mais informações, consulte Proteger-se contra ameaças de segurança com a SafetyNet.
Inicializar a API
Para usar a API Safe Browsing, você precisa inicializar a API chamando
initSafeBrowsing()
e esperar a conclusão do processo. O snippet de código abaixo mostra um exemplo:
Kotlin
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing())
Java
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing());
Solicitar uma verificação de URL
Seu app pode usar uma verificação de URL para determinar se um URL representa uma ameaça conhecida. Alguns tipos de ameaça podem não ser relevantes para seu app. A API permite escolher quais tipos de ameaça são importantes para suas necessidades. Você pode especificar vários tipos de ameaça conhecidos.
Enviar a solicitação de verificação de URL
A API é independente do esquema usado, então você pode transmitir o URL com ou sem um esquema. Por exemplo, tanto
Kotlin
var url = "https://www.google.com"
Java
String url = "https://www.google.com";
quanto
Kotlin
var url = "www.google.com"
Java
String url = "www.google.com";
são válidos.
O código abaixo demonstra como enviar uma solicitação de verificação de 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()); } } });
Ler a resposta de verificação de URL
Usando o objeto
SafetyNetApi.SafeBrowsingResponse
retornado, chame o método
getDetectedThreats()
,
que retorna uma lista de
objetos
SafeBrowsingThreat
. Se a lista retornada estiver vazia, isso significa que a API não detectou nenhuma ameaça conhecida.
Se a lista não estiver vazia, chame
getThreatType()
em cada elemento da lista para determinar quais ameaças conhecidas a API detectou.
Para conferir o texto de alerta sugerido, consulte o Guia da API Safe Browsing para desenvolvedores.
Especificar tipos de ameaças
As constantes da classe SafeBrowsingThreat
contêm os
tipos de ameaça atualmente com suporte:
Tipo de ameaça | Definição |
---|---|
TYPE_POTENTIALLY_HARMFUL_APPLICATION |
Esse tipo de ameaça identifica URLs de páginas sinalizadas por terem aplicativos potencialmente nocivos. |
TYPE_SOCIAL_ENGINEERING |
Esse tipo de ameaça identifica URLs de páginas sinalizadas como contendo ameaças de engenharia social. |
Ao usar a API, você adiciona constantes de tipo de ameaça como argumentos. Você pode adicionar quantas constantes de tipo de ameaça o app exigir, mas só é possível usar constantes que não estejam marcadas como descontinuadas.
Encerrar sua sessão de Navegação segura
Se o app não precisar usar a API Safe Browsing por um período prolongado,
verifique todos os URLs necessários no app e encerre a
sessão de Navegação segura usando o
método
shutdownSafeBrowsing()
:
Kotlin
SafetyNet.getClient(this).shutdownSafeBrowsing()
Java
SafetyNet.getClient(this).shutdownSafeBrowsing();
Recomendamos que você chame shutdownSafeBrowsing()
no método
onPause()
e initSafeBrowsing()
no método onResume()
da atividade. No entanto,
confira se a execução de initSafeBrowsing()
terminou antes de
chamar
lookupUri()
.
Ao garantir que sua sessão esteja sempre
atualizada, você reduz a possibilidade de erros internos no app.
Dados coletados pela API SafetyNet Safe Browsing
A API SafetyNet Safe Browsing coleta os dados abaixo automaticamente quando se comunica com esse serviço no Android:
Dados | Descrição |
---|---|
Atividade no app | Coleta o prefixo de hash de URLs após uma correspondência desse tipo para detectar URLs maliciosos. |
Nosso objetivo é oferecer o máximo de transparência possível, mas você é o único responsável por decidir como responder ao formulário da seção "Segurança dos dados" do Google Play com relação à coleta, ao compartilhamento e às práticas de segurança dos dados do usuário do seu app.