API безопасного просмотра SafetyNet

API безопасного просмотра SafetyNet, библиотека на базе сервисов Google Play , предоставляет услуги для определения того, был ли URL-адрес помечен Google как известная угроза.

Ваше приложение может использовать этот API, чтобы определить, был ли определенный URL-адрес классифицирован Google как известная угроза. Внутри SafetyNet реализован клиент для сетевого протокола безопасного просмотра v4, разработанного Google. И клиентский код, и сетевой протокол версии 4 были разработаны с целью сохранить конфиденциальность пользователей и свести к минимуму потребление заряда батареи и пропускной способности. Используйте этот API, чтобы в полной мере воспользоваться преимуществами службы безопасного просмотра Google на Android с максимальной оптимизацией ресурсов и без реализации сетевого протокола.

В этом документе объясняется, как использовать API поиска безопасного просмотра SafetyNet для проверки URL-адреса на наличие известных угроз.

Условия обслуживания

Используя API безопасного просмотра, вы соглашаетесь соблюдать Условия обслуживания . Прежде чем получить доступ к API безопасного просмотра, прочтите и поймите все применимые условия и политики.

Запрос и регистрация ключа Android API

Прежде чем использовать API безопасного просмотра, создайте и зарегистрируйте ключ API Android. Конкретные действия см. на странице о начале работы с безопасным просмотром .

Добавьте зависимость API SafetyNet

Прежде чем использовать API безопасного просмотра, добавьте API SafetyNet в свой проект. Если вы используете Android Studio, добавьте эту зависимость в файл Gradle на уровне приложения. Дополнительную информацию см. в разделе Защита от угроз безопасности с помощью SafetyNet .

Инициализировать API

Чтобы использовать API безопасного просмотра, необходимо инициализировать API, вызвав initSafeBrowsing() и дождавшись его завершения. Следующий фрагмент кода представляет собой пример:

Котлин

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

Ява

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

Запросить проверку URL

Ваше приложение может использовать проверку URL-адресов, чтобы определить, представляет ли URL-адрес известную угрозу. Некоторые типы угроз могут не представлять интереса для вашего конкретного приложения. API позволяет вам выбирать, какие типы угроз важны для ваших нужд. Вы можете указать несколько известных типов угроз.

Отправьте запрос на проверку URL

API не зависит от используемой схемы, поэтому вы можете передавать URL-адрес со схемой или без нее. Например, оба

Котлин

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

Ява

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

и

Котлин

var url = "www.google.com"

Ява

String url = "www.google.com";

действительны.

Следующий код демонстрирует, как отправить запрос на проверку URL-адреса:

Котлин

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}")
           }
       }

Ява

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());
               }
           }
   });

Прочтите ответ на проверку URL-адреса

Используя возвращенный объект SafetyNetApi.SafeBrowsingResponse , вызовите его метод getDetectedThreats() , который возвращает список объектов SafeBrowsingThreat . Если возвращенный список пуст, API не обнаружил никаких известных угроз. Если список не пуст, вызовите getThreatType() для каждого элемента в списке, чтобы определить, какие известные угрозы обнаружил API.

Рекомендуемый язык предупреждений см. в Руководстве разработчика API безопасного просмотра .

Укажите интересующие типы угроз

Константы класса SafeBrowsingThreat содержат поддерживаемые в настоящее время типы угроз:

Тип угрозы Определение
TYPE_POTENTIALLY_HARMFUL_APPLICATION Этот тип угрозы определяет URL-адреса страниц, помеченных как содержащие потенциально опасные приложения.
TYPE_SOCIAL_ENGINEERING Этот тип угрозы определяет URL-адреса страниц, помеченных как содержащие угрозы социальной инженерии.

При использовании API вы добавляете константы типов угроз в качестве аргументов. Вы можете добавить столько констант типов угроз, сколько требуется вашему приложению, но вы можете использовать только константы, которые не помечены как устаревшие.

Завершите сеанс безопасного просмотра

Если вашему приложению не требуется использовать API безопасного просмотра в течение длительного периода, проверьте все необходимые URL-адреса в вашем приложении, а затем завершите сеанс безопасного просмотра с помощью метода shutdownSafeBrowsing() :

Котлин

SafetyNet.getClient(this).shutdownSafeBrowsing()

Ява

SafetyNet.getClient(this).shutdownSafeBrowsing();

Мы рекомендуем вам вызывать shutdownSafeBrowsing() в методе onPause() вашего действия и вызывать initSafeBrowsing() в методе onResume() вашего действия. Однако перед вызовом lookupUri() убедитесь, что initSafeBrowsing() завершил выполнение. Убедившись, что ваша сессия всегда свежа, вы уменьшаете вероятность внутренних ошибок в вашем приложении.

Данные, собранные API безопасного просмотра SafetyNet.

API безопасного просмотра SafetyNet автоматически собирает следующие данные при обмене данными со службой безопасного просмотра на Android:

Данные Описание
Активность приложений Собирает хеш-префикс URL-адресов после совпадения локального хэш-префикса в целях обнаружения вредоносных URL-адресов.

Хотя мы стремимся быть максимально прозрачными, вы несете единоличную ответственность за принятие решения о том, как реагировать на форму раздела безопасности данных Google Play, касающуюся сбора пользовательских данных, обмена ими и методов обеспечения безопасности в вашем приложении.