SafetyNet Güvenli Tarama API'si

Google Play Hizmetleri tarafından desteklenen bir kitaplık olan SafetyNet Safe Browsing API, bir URL'nin Google tarafından bilinen bir tehdit olarak işaretlenip işaretlenmediğini belirleme hizmetleri sağlar.

Uygulamanız, belirli bir URL'nin Google tarafından bilinen bir tehdit olarak sınıflandırılıp sınıflandırılmadığını belirlemek için bu API'yi kullanabilir. SafetyNet, Google tarafından geliştirilen Güvenli Tarama Ağ Protokolü v4 için dahili olarak bir istemci uygular. Hem istemci kodu hem de v4 ağ protokolü, kullanıcıların gizliliğini korumak ve pil ile bant genişliği tüketimini en aza indirmek için tasarlanmıştır. Google'ın Android'deki Güvenli Tarama hizmetinden en fazla kaynak açısından optimize edilmiş şekilde ve ağ protokolünü uygulamadan yararlanmak için bu API'yi kullanın.

Bu dokümanda, bir URL'yi bilinen tehditlere karşı kontrol etmek için SafetyNet Safe Browsing Lookup API'nin nasıl kullanılacağı açıklanmaktadır.

Hizmet şartları

Safe Browsing API'yi kullanarak Hizmet Şartları'na tabi olmayı kabul etmiş olursunuz. Güvenli Tarama API'ye erişmeden önce lütfen geçerli tüm hüküm ve politikaları okuyup anlayın.

Android API anahtarı isteme ve kaydetme

Güvenli Tarama API'sini kullanmadan önce bir Android API anahtarı oluşturup kaydedin. Belirli adımlar için Güvenli Tarama'yı kullanmaya başlama başlıklı sayfaya bakın.

SafetyNet API bağımlılığını ekleme

Safe Browsing API'yi kullanmadan önce SafetyNet API'yi projenize ekleyin. Android Studio kullanıyorsanız bu bağımlılığı uygulama düzeyindeki Gradle dosyanıza ekleyin. Daha fazla bilgi için SafetyNet ile güvenlik tehditlerine karşı koruma konusuna bakın.

API'yi başlatma

Safe Browsing API'yi kullanmak için initSafeBrowsing() çağrısını yaparak API'yi başlatmanız ve tamamlanmasını beklemeniz gerekir. Aşağıdaki kod snippet'inde bir örnek verilmiştir:

Kotlin

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

Java

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

URL kontrolü isteyin

Uygulamanız, bir URL'nin bilinen bir tehdit oluşturup oluşturmadığını belirlemek için URL kontrolü yapabilir. Bazı tehdit türleri, uygulamanız için önemli olmayabilir. API, ihtiyaçlarınız için hangi tehdit türlerinin önemli olduğunu seçmenize olanak tanır. Birden fazla bilinen tehdit türünü belirtebilirsiniz.

URL kontrol isteğini gönderme

API, kullanılan şemaya bağlı değildir. Bu nedenle, URL'yi şema ile veya şema olmadan iletebilirsiniz. Örneğin,

Kotlin

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

Java

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

ve

Kotlin

var url = "www.google.com"

Java

String url = "www.google.com";

geçerlidir.

Aşağıdaki kod, bir URL kontrolü isteğinin nasıl gönderileceğini gösterir:

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

URL kontrol yanıtını okuma

Döndürülen SafetyNetApi.SafeBrowsingResponse nesnesini kullanarak, SafeBrowsingThreat nesnelerinin bir listesini döndüren getDetectedThreats() yöntemini çağırın. Döndürülen liste boşsa API bilinen bir tehdit algılamamıştır. Liste boş değilse API'nin algıladığı bilinen tehditleri belirlemek için listedeki her öğe için getThreatType() çağrısı yapın.

Önerilen uyarı dilini görmek için Safe Browsing API Geliştirici Kılavuzu'na bakın.

İlgilendiğiniz tehdit türlerini belirtin

SafeBrowsingThreat sınıfındaki sabitler şu anda desteklenen tehdit türlerini içerir:

Tehdit türü Tanım
TYPE_POTENTIALLY_HARMFUL_APPLICATION Bu tehdit türü, zararlı olabilecek uygulamalar içerdiği işaretlenen sayfaların URL'lerini tanımlar.
TYPE_SOCIAL_ENGINEERING Bu tehdit türü, sosyal mühendislik tehditleri içerdiği işaretlenen sayfaların URL'lerini tanımlar.

API'yi kullanırken tehdit türü sabitlerini bağımsız değişken olarak eklersiniz. Uygulamanız gerektirdiği kadar tehdit türü sabit değeri ekleyebilirsiniz ancak yalnızca desteği sonlandırılmış olarak işaretlenmemiş sabit değerleri kullanabilirsiniz.

Güvenli Tarama oturumunuzu kapatma

Uygulamanızın uzun süre boyunca Güvenli Tarama API'sini kullanması gerekmiyorsa uygulamanızdaki gerekli tüm URL'leri kontrol edin ve ardından shutdownSafeBrowsing() yöntemini kullanarak Güvenli Tarama oturumunuzu kapatın:

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

Java

SafetyNet.getClient(this).shutdownSafeBrowsing();

Etkinliğinizin onPause() yönteminde shutdownSafeBrowsing()'ü, etkinliğinizin onResume() yönteminde ise initSafeBrowsing()'i çağırmanızı öneririz. Ancak lookupUri() işlevini çağırmadan önce initSafeBrowsing() işlevinin yürütülmesinin tamamlandığından emin olun. Oturumunuzun her zaman yeni olduğundan emin olarak uygulamanızdaki dahili hata olasılığını azaltırsınız.

SafetyNet Güvenli Tarama API'si tarafından toplanan veriler

SafetyNet Güvenli Tarama API'si, Android'deki Güvenli Tarama hizmetiyle iletişim kurarken aşağıdaki verileri otomatik olarak toplar:

Veri Açıklama
Uygulama Etkinliği Kötü amaçlı URL'leri tespit etmek için, yerel karma ön eki eşleşmesinden sonra URL'lerin karma ön ekini toplar.

Olabildiğince şeffaf olmayı hedefliyoruz. Ancak uygulamanızın kullanıcı verilerini toplama, paylaşma ve güvenlikle ilgili yaklaşımı hakkında Google Play'in Veri Güvenliği bölümü formuna nasıl yanıt vereceğinize karar vermek tamamen sizin sorumluluğunuzdadır.