SafetyNet Safe Browsing API

SafetyNet सुरक्षित ब्राउज़िंग API, Google Play services की मदद से काम करने वाली एक लाइब्रेरी है. यह ऐसी सेवाएं उपलब्ध कराती है जिनसे यह पता लगाया जा सकता है कि Google ने किसी यूआरएल को जाने-माने खतरे के तौर पर मार्क किया है या नहीं.

आपका ऐप्लिकेशन इस एपीआई का इस्तेमाल करके यह पता लगा सकता है कि Google ने किसी यूआरएल को ज्ञात खतरे के तौर पर क्लासिफ़ाई किया है या नहीं. इंटरनल तौर पर, SafetyNet, Google के बनाए गए Safe Browsing Network Protocol v4 के लिए क्लाइंट लागू करता है. क्लाइंट कोड और v4 नेटवर्क प्रोटोकॉल, दोनों को उपयोगकर्ताओं की निजता बनाए रखने के लिए डिज़ाइन किया गया था. साथ ही, बैटरी और बैंडविथ की खपत को कम से कम रखने के लिए भी डिज़ाइन किया गया था. इस एपीआई का इस्तेमाल करके, Android पर Google की सुरक्षित ब्राउज़िंग सेवा का पूरा फ़ायदा पाएं. इसके लिए, आपको नेटवर्क प्रोटोकॉल लागू करने की ज़रूरत नहीं होगी. साथ ही, यह एपीआई सबसे कम संसाधनों का इस्तेमाल करेगा.

वर्शन 5 (v5) के नए अपडेट में, Oblivious HTTP का इस्तेमाल करके, डेटा की फ़्रेशनेस और निजता में काफ़ी सुधार किए गए हैं.

इस दस्तावेज़ में, SafetyNet Safe Browsing Lookup API का इस्तेमाल करके, किसी यूआरएल पर मौजूद जाने-पहचाने खतरों की जांच करने का तरीका बताया गया है.

सेवा की शर्तें

सुरक्षित ब्राउज़िंग एपीआई का इस्तेमाल करने का मतलब है कि आप सेवा की शर्तों से सहमत हैं. Safe Browsing API को ऐक्सेस करने से पहले, कृपया इस पर लागू होने वाली सभी शर्तों और नीतियों को पढ़कर समझ लें.

Android API पासकोड का अनुरोध करना और उसे रजिस्टर करना

Safe Browsing API का इस्तेमाल करने से पहले, Android API पासकोड बनाएं और उसे रजिस्टर करें. खास चरणों के लिए, सुरक्षित ब्राउज़िंग का इस्तेमाल शुरू करने के बारे में जानकारी देने वाला पेज देखें.

पांचवें वर्शन में, SafeBrowsingClient इंस्टेंस बनाते समय यह एपीआई पासकोड दिया जाता है.

SafetyNet API डिपेंडेंसी जोड़ना

Safe Browsing API का इस्तेमाल करने से पहले, अपने प्रोजेक्ट में SafetyNet API जोड़ें. अगर Android Studio का इस्तेमाल किया जा रहा है, तो इस डिपेंडेंसी को ऐप्लिकेशन-लेवल की Gradle फ़ाइल में जोड़ें. ज़्यादा जानकारी के लिए, SafetyNet की मदद से सुरक्षा से जुड़े खतरों से बचना लेख पढ़ें.

एपीआई को शुरू करना

सुरक्षित ब्राउज़िंग API का इस्तेमाल करने के लिए, आपको API को शुरू करना होगा. इसके लिए, initSafeBrowsing को कॉल करें और इसके पूरा होने का इंतज़ार करें. यहां दिए गए कोड स्निपेट में इसका एक उदाहरण दिया गया है:

Kotlin

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

Java

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

पांचवें वर्शन में, GmsCore, सुरक्षित ब्राउज़िंग क्लाइंट उपलब्ध कराता है. आपको SafeBrowsingClient इंस्टेंस पाना होगा. हमने एपीआई को बेहतर बनाया है, ताकि इसकी परफ़ॉर्मेंस बेहतर हो और यह कम जगह ले.

// Draft interface for the new client
public interface SafeBrowsingClient extends HasApiKey<SafeBrowsingApiOptions> {
  Task<SafeBrowsingResponse> lookupUri(String uri, @ThreatType List<Integer> threatTypes, @Protocol int protocol);
  Task<SupportedThreatTypesResponse> getSupportedThreatTypes();
}

यूआरएल की जांच का अनुरोध करना

lookupUri तरीके का इस्तेमाल करके देखें कि कोई यूआरआई खतरा पैदा करता है या नहीं. आपको इस्तेमाल किए जाने वाले प्रोटोकॉल के बारे में बताना होगा. यह स्थानीय ब्लॉकलिस्ट (v4) या रीयल-टाइम सुरक्षा (v5) हो सकता है.

यूआरएल की जांच करने का अनुरोध भेजना

एपीआई, इस्तेमाल की गई स्कीम से अलग होता है. इसलिए, यूआरएल को स्कीम के साथ या उसके बिना पास किया जा सकता है. उदाहरण के लिए, दोनों

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";

मान्य हैं.

यहां दिए गए कोड में, यूआरएल की जांच करने का अनुरोध भेजने का तरीका बताया गया है:

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

अपडेट किए गए lookupUri सिग्नेचर में यूआरआई, खतरे के टाइप की सूची, और प्रोटोकॉल शामिल होता है.

val threatTypes = listOf(ThreatType.TYPE_SOCIAL_ENGINEERING, ThreatType.TYPE_MALWARE)
val protocol = Protocol.REAL_TIME // or Protocol.LOCAL_BLOCK_LIST

safeBrowsingClient.lookupUri(url, threatTypes, protocol)
    .addOnSuccessListener { response ->
        if (response.detectedThreats.isEmpty()) {
            // No threats found
        } else {
            // Threats detected!
        }
    }

यूआरएल की जांच के जवाब को पढ़ना

जवाब में मिले SafetyNetApi.SafeBrowsingResponse ऑब्जेक्ट का इस्तेमाल करके, उसके getDetectedThreats तरीके को कॉल करें. यह तरीका, SafeBrowsingThreat ऑब्जेक्ट की सूची दिखाता है. अगर दिखाई गई सूची खाली है, तो इसका मतलब है कि एपीआई को कोई भी ज्ञात खतरा नहीं मिला. अगर सूची खाली नहीं है, तो सूची में मौजूद हर एलिमेंट पर getThreatType को कॉल करें. इससे यह पता चलेगा कि एपीआई ने किन ज्ञात खतरों का पता लगाया है.

चेतावनी के लिए सुझाई गई भाषा देखने के लिए, सुरक्षित ब्राउज़िंग API डेवलपर गाइड देखें.

अपनी दिलचस्पी के हिसाब से खतरे के टाइप तय करना

SafeBrowsingThreat क्लास में मौजूद कॉन्स्टेंट में, फ़िलहाल इस्तेमाल किए जा सकने वाले थ्रेट टाइप शामिल होते हैं:

खतरे का प्रकार परिभाषा
TYPE_POTENTIALLY_HARMFUL_APPLICATION इस तरह के खतरे से, उन पेजों के यूआरएल का पता चलता है जिन्हें नुकसान पहुंचाने की आशंका वाले ऐप्लिकेशन के तौर पर फ़्लैग किया गया है.
TYPE_SOCIAL_ENGINEERING इस तरह के खतरे से, उन पेजों के यूआरएल का पता चलता है जिन्हें सोशल इंजीनियरिंग वाले खतरों के तौर पर फ़्लैग किया गया है.

एपीआई का इस्तेमाल करते समय, थ्रेट टाइप के कॉन्स्टेंट को आर्ग्युमेंट के तौर पर जोड़ा जाता है. अपने ऐप्लिकेशन की ज़रूरत के हिसाब से, थ्रेट टाइप के जितने चाहें उतने कॉन्स्टेंट जोड़े जा सकते हैं. हालांकि, सिर्फ़ उन कॉन्स्टेंट का इस्तेमाल किया जा सकता है जिन्हें डेप्रिकेट के तौर पर मार्क नहीं किया गया है.

सुरक्षित ब्राउज़िंग की सुविधा का सेशन शट डाउन करें

अगर आपके ऐप्लिकेशन को लंबे समय तक Safe Browsing API का इस्तेमाल नहीं करना है, तो अपने ऐप्लिकेशन में सभी ज़रूरी यूआरएल की जांच करें. इसके बाद, shutdownSafeBrowsing तरीके का इस्तेमाल करके, Safe Browsing सेशन बंद करें:

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

Java

SafetyNet.getClient(this).shutdownSafeBrowsing();

हमारा सुझाव है कि आप अपनी गतिविधि के onPause तरीके में shutdownSafeBrowsing को कॉल करें. साथ ही, अपनी गतिविधि के onResume तरीके में initSafeBrowsing को कॉल करें. हालांकि, lookupUri को कॉल करने से पहले, पक्का करें कि initSafeBrowsing का काम पूरा हो गया हो. यह पक्का करके कि आपका सेशन हमेशा नया है, अपने ऐप्लिकेशन में आंतरिक गड़बड़ियों की संभावना को कम किया जा सकता है.

रीयल-टाइम सुरक्षा की जानकारी

v5 अपडेट में, रीयल-टाइम सुरक्षा मोड पेश किया गया है. इससे डेटा के पुराने होने की समस्याओं से बचा जा सकता है. v4 में, डेटा के पुराने होने की समस्या 20 से 50 मिनट तक हो सकती थी. यह डिफ़ॉल्ट रूप से अनुमति दें प्रोटोकॉल से डिफ़ॉल्ट रूप से जांच करें प्रोटोकॉल पर स्विच करता है. इससे तेज़ी से फैलने वाले खतरों से बेहतर तरीके से सुरक्षा मिलती है. रीयल-टाइम मोड में, क्लाइंट एक लोकल डेटाबेस और संभावित रूप से सुरक्षित साइटों का ग्लोबल कैश बनाए रखते हैं. इससे, उन्हें नए खतरों से जुड़े डेटा के साथ करीब-करीब रीयल-टाइम में सुरक्षा मिलती है.

इस तरह के खतरों का पता लगाया जा सकता है

एपीआई की मदद से, यह चुना जा सकता है कि आपकी ज़रूरतों के हिसाब से किस तरह के खतरे अहम हैं. v5 API, कई तरह के खतरों से जुड़ी जानकारी देता है:

खतरे के टाइप का कॉन्स्टेंट ब्यौरा
NO_THREAT कोई खतरा नहीं है.
TYPE_MALWARE मैलवेयर से जुड़े सामान्य खतरे.
TYPE_UNWANTED_SOFTWARE अनचाहे सॉफ़्टवेयर या ऐप्लिकेशन.
TYPE_POTENTIALLY_HARMFUL_APPLICATION ऐसे ऐप्लिकेशन जो डिवाइस या उपयोगकर्ता को नुकसान पहुंचा सकते हैं.
TYPE_SOCIAL_ENGINEERING फ़िशिंग और गुमराह करने वाली अन्य साइटें.
TYPE_TRICK_TO_BILL ऐसे पेज जो उपयोगकर्ताओं को बिलिंग की कार्रवाइयां करने के लिए धोखा देते हैं.
TYPE_BETTER_ADS_VIOLATION ऐसी साइटें जो Better Ads Standards का उल्लंघन करती हैं.
TYPE_MALWARE_OFFLINE ऑफ़लाइन मैलवेयर.
TYPE_ABUSIVE_EXPERIENCE_VIOLATION ऐसे उल्लंघन जिनसे उपयोगकर्ता को खराब अनुभव मिलता है.
TYPE_HIGH_CONFIDENCE_ALLOW_LIST ज़्यादा भरोसेमंद अनुमति वाली सूची

SafetyNet सुरक्षित ब्राउज़िंग API से इकट्ठा किया गया डेटा

Android पर Safe Browsing सेवा से कम्यूनिकेट करते समय, SafetyNet Safe Browsing API अपने-आप यह डेटा इकट्ठा करता है:

डेटा ब्यौरा
ऐप्लिकेशन में की गई गतिविधि यह कुकी, नुकसान पहुंचाने वाले यूआरएल का पता लगाने के लिए, यूआरएल के हैश प्रीफ़िक्स इकट्ठा करती है. ऐसा तब किया जाता है, जब स्थानीय हैश प्रीफ़िक्स मैच हो जाता है.

SafetyNet Safe Browsing API, नुकसान पहुंचाने वाले यूआरएल का पता लगाने के लिए, यूआरएल के हैश प्रीफ़िक्स इकट्ठा करता है. वर्शन 5 में, इन लुकअप के दौरान उपयोगकर्ता के डेटा को ज़्यादा सुरक्षित रखने के लिए, ऑब्लिवियस एचटीटीपी लागू किया गया है.

हम ज़्यादा से ज़्यादा पारदर्शी होने की कोशिश करते हैं. हालांकि, Google Play के डेटा सुरक्षा वाले सेक्शन के फ़ॉर्म में मांगी गई जानकारी कैसे देनी है, यह तय करने की पूरी ज़िम्मेदारी आपकी है. इस फ़ॉर्म में, ऐप्लिकेशन इस्तेमाल करने वाले लोगों का डेटा इकट्ठा करने, उसे शेयर करने, और उसकी सुरक्षा के तरीकों के बारे में जानकारी देनी होती है.