SafetyNet Safe Browsing API

SafetyNet Safe Browsing API, library yang didukung oleh layanan Google Play, menyediakan layanan untuk menentukan apakah URL telah ditandai sebagai ancaman yang diketahui oleh Google atau belum.

Aplikasi Anda dapat menggunakan API ini untuk menentukan apakah URL tertentu telah diklasifikasikan oleh Google sebagai ancaman yang diketahui atau tidak. Secara internal, SafetyNet menerapkan klien untuk Protokol Jejaring v4 Safe Browsing yang dikembangkan oleh Google. Baik kode klien maupun protokol jaringan v4 dirancang untuk melindungi privasi pengguna serta menjaga konsumsi baterai dan bandwidth seminimal mungkin. Gunakan API ini untuk memanfaatkan sepenuhnya layanan Safe Browsing Google di Android dengan cara yang paling hemat resource, tanpa menerapkan protokol jaringannya.

Dokumen ini menjelaskan cara menggunakan SafetyNet Safe Browsing Lookup API untuk memeriksa ancaman yang diketahui di URL.

Persyaratan layanan

Dengan menggunakan Safe Browsing API, Anda setuju untuk terikat dengan Persyaratan Layanan. Harap baca dan pahami semua persyaratan dan kebijakan yang berlaku sebelum mengakses Safe Browsing API.

Meminta dan mendaftarkan kunci Android API

Sebelum menggunakan Safe Browsing API, buat dan daftarkan kunci API Android. Untuk mengetahui langkah-langkah tertentu, lihat halaman tentang mulai menggunakan Safe Browsing.

Menambahkan dependensi SafetyNet API

Sebelum menggunakan Safe Browsing API, tambahkan SafetyNet API ke project Anda. Jika Anda menggunakan Android Studio, tambahkan dependensi ini ke file Gradle level aplikasi. Untuk mengetahui informasi selengkapnya, baca Melindungi dari ancaman keamanan dengan SafetyNet.

Menginisialisasi API

Untuk menggunakan Safe Browsing API, Anda harus menginisialisasi API dengan memanggil initSafeBrowsing() dan menunggu hingga selesai. Cuplikan kode berikut menunjukkan sebuah contoh:

Kotlin

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

Java

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

Meminta pemeriksaan URL

Aplikasi Anda dapat menggunakan pemeriksaan URL untuk menentukan apakah URL menimbulkan ancaman yang diketahui atau tidak. Beberapa jenis ancaman mungkin tidak relevan dengan aplikasi Anda. API ini memungkinkan Anda memilih jenis ancaman yang penting untuk kebutuhan Anda. Anda dapat menentukan beberapa jenis ancaman yang diketahui.

Mengirim permintaan pemeriksaan URL

API ini tidak bergantung pada skema yang digunakan, jadi Anda dapat meneruskan URL dengan atau tanpa skema. Misalnya, baik

Kotlin

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

Java

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

maupun

Kotlin

var url = "www.google.com"

Java

String url = "www.google.com";

valid.

Kode berikut menunjukkan cara mengirim permintaan pemeriksaan 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());
               }
           }
   });

Membaca respons pemeriksaan URL

Menggunakan objek SafetyNetApi.SafeBrowsingResponse yang ditampilkan, panggil metode getDetectedThreats(), yang akan menampilkan daftar objek SafeBrowsingThreat. Jika daftar yang ditampilkan kosong, berarti API tidak mendeteksi ancaman apa pun yang diketahui. Jika daftar tidak kosong, panggil getThreatType() pada setiap elemen dalam daftar untuk menentukan ancaman yang diketahui dan terdeteksi oleh API.

Untuk melihat bahasa peringatan yang disarankan, lihat Panduan Developer Safe Browsing API.

Menentukan jenis ancaman yang relevan

Konstanta dalam class SafeBrowsingThreat berisi jenis ancaman yang saat ini didukung:

Jenis ancaman Definisi
TYPE_POTENTIALLY_HARMFUL_APPLICATION Jenis ancaman ini mengidentifikasi URL halaman yang ditandai sebagai berisi aplikasi yang berpotensi berbahaya.
TYPE_SOCIAL_ENGINEERING Jenis ancaman ini mengidentifikasi URL halaman yang ditandai sebagai berisi ancaman manipulasi psikologis.

Saat menggunakan API, Anda menambahkan konstanta jenis ancaman sebagai argumen. Anda dapat menambahkan sebanyak mungkin konstanta jenis ancaman sesuai kebutuhan aplikasi, tetapi Anda hanya dapat menggunakan konstanta yang tidak ditandai sebagai tidak digunakan lagi.

Mematikan sesi Safe Browsing

Jika aplikasi Anda tidak perlu menggunakan Safe Browsing API dalam waktu lama, periksa semua URL yang diperlukan dalam aplikasi Anda, lalu matikan sesi Safe Browsing menggunakan metode shutdownSafeBrowsing():

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

Java

SafetyNet.getClient(this).shutdownSafeBrowsing();

Sebaiknya panggil shutdownSafeBrowsing() dalam metode onPause() aktivitas Anda, dan panggil initSafeBrowsing() dalam metode onResume() aktivitas Anda. Namun, pastikan initSafeBrowsing() telah selesai dieksekusi sebelum memanggil lookupUri(). Dengan memastikan sesi Anda selalu baru, Anda mengurangi kemungkinan error internal dalam aplikasi.

Data yang dikumpulkan oleh SafetyNet Safe Browsing API

SafetyNet Safe Browsing API mengumpulkan data berikut secara otomatis saat berkomunikasi dengan layanan Safe Browsing di Android:

Data Deskripsi
Aktivitas Aplikasi Mengumpulkan awalan hash URL setelah awalan hash lokal cocok untuk tujuan mendeteksi URL berbahaya.

Meskipun kami berupaya bersikap setransparan mungkin, Anda sepenuhnya bertanggung jawab untuk memutuskan cara merespons formulir bagian keamanan data Google Play terkait praktik pengumpulan, berbagi, dan keamanan data pengguna aplikasi.