SafetyNet Safe Browsing API

SafetyNet Safe Browsing API (một thư viện do Dịch vụ Google Play cung cấp) đem đến các dịch vụ dùng để xác định liệu một URL có bị Google đánh dấu là mối đe doạ đã biết hay không.

Ứng dụng của bạn có thể dùng API này để xác định xem một URL cụ thể có bị Google phân loại là mối đe doạ đã biết hay không. Trong nội bộ, SafetyNet triển khai một ứng dụng cho Giao thức mạng của dịch vụ Duyệt web an toàn phiên bản 4 do Google phát triển. Cả mã ứng dụng và giao thức mạng phiên bản 4 này đều được thiết kế để bảo vệ quyền riêng tư của người dùng, đồng thời giữ cho mức tiêu thụ pin và băng thông ở mức tối thiểu. Hãy sử dụng API này để khai thác tối đa dịch vụ Duyệt web an toàn của Google trên Android theo cách tối ưu hoá tài nguyên nhất mà không cần phải triển khai giao thức mạng của dịch vụ.

Tài liệu này giải thích cách sử dụng SafetyNet Safe Browsing Lookup API để kiểm tra một URL nhằm phát hiện các mối đe doạ đã biết.

Điều khoản dịch vụ

Bằng việc sử dụng Safe Browsing API, bạn đồng ý chịu sự ràng buộc của Điều khoản dịch vụ. Vui lòng đọc và nắm được tất cả các điều khoản và chính sách áp dụng trước khi truy cập vào Safe Browsing API.

Yêu cầu và đăng ký khoá API trên Android

Trước khi sử dụng Safe Browsing API, hãy tạo và đăng ký một khoá API trên Android. Để biết các bước cụ thể, hãy xem trang trình bày về cách bắt đầu sử dụng dịch vụ Duyệt web an toàn.

Thêm phần phụ thuộc SafetyNet API

Trước khi sử dụng Safe Browsing API, hãy thêm SafetyNet API vào dự án của bạn. Nếu bạn đang sử dụng Android Studio, hãy thêm phần phụ thuộc này vào tệp Gradle cấp ứng dụng của bạn. Để biết thêm thông tin, hãy xem bài viết Chống lại các mối đe doạ bảo mật bằng SafetyNet.

Khởi chạy API

Để sử dụng Safe Browsing API, bạn phải khởi chạy API bằng cách gọi initSafeBrowsing() và chờ cho quá trình này hoàn tất. Bạn có thể tham khảo đoạn mã sau đây:

Kotlin

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

Java

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

Yêu cầu kiểm tra URL

Ứng dụng của bạn có thể dùng yêu cầu kiểm tra URL để xác định xem một URL có gây ra mối đe doạ đã biết hay không. Ứng dụng cụ thể của bạn có thể không cần để ý đến một số kiểu mối đe doạ. API này cho phép bạn chọn những kiểu mối đe doạ nào quan trọng với nhu cầu của mình. Bạn có thể chỉ định nhiều kiểu mối đe doạ đã biết.

Gửi yêu cầu kiểm tra URL

API này không phụ thuộc vào lược đồ được sử dụng, vì vậy, bạn có thể truyền URL có hoặc không có lược đồ. Ví dụ: cả hai

Kotlin

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

Java

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

Kotlin

var url = "www.google.com"

Java

String url = "www.google.com";

đều hợp lệ.

Mã sau đây minh hoạ cách gửi một yêu cầu kiểm tra 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());
               }
           }
   });

Đọc phản hồi kiểm tra URL

Sử dụng đối tượng SafetyNetApi.SafeBrowsingResponse được trả về, hãy gọi phương thức getDetectedThreats(). Phương thức này sẽ trả về một danh sách các đối tượng SafeBrowsingThreat. Nếu danh sách được trả về là danh sách trống, tức là API không phát hiện thấy mối đe doạ nào đã biết. Nếu danh sách này không phải là danh sách trống, hãy gọi getThreatType() cho từng phần tử trong danh sách để xác định mối đe doạ đã biết mà API phát hiện được.

Để biết ngôn ngữ cảnh báo được đề xuất, hãy xem Hướng dẫn dành cho nhà phát triển về Safe Browsing API.

Chỉ định các kiểu mối đe doạ cần quan tâm

Các hằng số trong lớp SafeBrowsingThreat chứa các kiểu mối đe doạ hiện được hỗ trợ:

Kiểu mối đe dọa Định nghĩa
TYPE_POTENTIALLY_HARMFUL_APPLICATION Kiểu mối đe doạ này xác định URL của những trang bị gắn cờ là chứa ứng dụng có khả năng gây hại.
TYPE_SOCIAL_ENGINEERING Kiểu mối đe doạ này xác định URL của những trang bị gắn cờ là có chứa mối đe doạ tấn công phi kỹ thuật.

Khi sử dụng API này, bạn cần thêm các hằng số kiểu mối đe doạ làm đối số. Bạn có thể thêm bao nhiêu hằng số kiểu mối đe doạ tuỳ thích theo yêu cầu của ứng dụng, nhưng chỉ có thể dùng các hằng số chưa được đánh dấu là không dùng nữa.

Tắt phiên Duyệt web an toàn

Nếu ứng dụng của bạn không cần dùng Safe Browsing API trong một thời gian dài, hãy kiểm tra tất cả các URL cần thiết trong ứng dụng rồi tắt phiên Duyệt web an toàn bằng phương thức shutdownSafeBrowsing():

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

Java

SafetyNet.getClient(this).shutdownSafeBrowsing();

Bạn nên gọi shutdownSafeBrowsing() trong phương thức onPause() của hoạt động và gọi initSafeBrowsing() trong phương thức onResume() của hoạt động. Tuy nhiên, hãy chắc chắn rằng initSafeBrowsing() đã thực thi xong trước khi gọi lookupUri(). Bằng cách đảm bảo phiên luôn mới, khả năng xảy ra lỗi nội bộ trong ứng dụng của bạn sẽ giảm.

Dữ liệu do SafetyNet Safe Browsing API thu thập

SafetyNet Safe Browsing API sẽ tự động thu thập dữ liệu sau đây khi giao tiếp với dịch vụ Duyệt web an toàn trên Android:

Dữ liệu Mô tả
Hoạt động trong ứng dụng Thu thập tiền tố cho hàm băm của các URL sau khi so khớp với tiền tố cục bộ cho hàm băm nhằm mục đích phát hiện các URL độc hại.

Mặc dù chúng tôi luôn cố gắng minh bạch nhất có thể nhưng bạn hoàn toàn chịu trách nhiệm đối với việc đưa ra quyết định về cách phản hồi biểu mẫu trong mục an toàn dữ liệu của Google Play liên quan đến hoạt động thu thập, chia sẻ dữ liệu người dùng trong ứng dụng của bạn và các biện pháp bảo mật.