SafetyNet Safe Browsing API

SafetyNet Safe Browsing API হল Google Play পরিষেবা দ্বারা পরিচালিত একটি লাইব্রেরি, যা কোনও URL-কে Google পরিচিত হুমকি হিসেবে চিহ্নিত করেছে কিনা তা নির্ধারণ করার জন্য পরিষেবা প্রদান করে।

কোনও নির্দিষ্ট URL-কে Google পরিচিত বিপদ হিসেবে শ্রেণীবদ্ধ করেছে কিনা তা নির্ধারণ করতে আপনার অ্যাপ এই API ব্যবহার করতে পারে। অভ্যন্তরীণভাবে, SafetyNet, Google-এর তৈরি করা Safe Browsing Network Protocol v4-এর জন্য একটি ক্লায়েন্ট প্রয়োগ করে। ক্লায়েন্ট কোড এবং v4 নেটওয়ার্ক প্রোটোকল, দুটিই ব্যবহারকারীর গোপনীয়তা রক্ষা করা এবং ব্যাটারি ও ব্যান্ডউইথের ব্যবহার ন্যূনতম রাখার জন্য ডিজাইন করা হয়েছে। Android-এ Google-এর Safe Browsing পরিষেবার সম্পূর্ণ সুবিধা নিতে এই API ব্যবহার করুন। এটি সবচেয়ে রিসোর্স-অপ্টিমাইজড উপায়ে এবং এর নেটওয়ার্ক প্রোটোকল প্রয়োগ না করেই কাজ করে।

নতুন ভার্সন ৫ (v5) আপডেট Oblivious HTTP ব্যবহারের মাধ্যমে ডেটা ফ্রেশনেস ও গোপনীয়তার ক্ষেত্রে উল্লেখযোগ্য উন্নতি করেছে।

পরিচিত বিপদ আছে কিনা তা জানতে কোনও URL চেক করার জন্য SafetyNet Safe Browsing Lookup API কীভাবে ব্যবহার করতে হয় তা এই ডকুমেন্ট ব্যাখ্যা করে।

পরিষেবার শর্তাবলী

নিরাপদ ব্রাউজিং API ব্যবহার করার মাধ্যমে, আপনি পরিষেবার শর্তাবলী মেনে চলতে সম্মতি দিচ্ছেন। Safe Browsing API অ্যাক্সেস করার আগে প্রযোজ্য সব শর্তাবলী ও নীতি পড়ে বুঝে নিন।

Android API key-এর জন্য অনুরোধ ও রেজিস্টার করা

Safe Browsing API ব্যবহার করার আগে, একটি Android API কী তৈরি ও রেজিস্টার করুন। নির্দিষ্ট ধাপের জন্য, Safe Browsing শুরু করা সম্পর্কিত পৃষ্ঠা দেখুন।

v5-এ, SafeBrowsingClient ইনস্ট্যান্স তৈরি করার সময় আপনি এই API কী প্রদান করেন।

SafetyNet API ডিপেন্ডেন্সি যোগ করুন

Safe Browsing API ব্যবহার করার আগে, আপনার প্রোজেক্টে SafetyNet API যোগ করুন। আপনি Android Studio ব্যবহার করলে, আপনার অ্যাপ-লেভেল Gradle ফাইলে এই ডিপেন্ডেন্সি যোগ করুন। আরও তথ্যের জন্য, SafetyNet-এর মাধ্যমে নিরাপত্তা সংক্রান্ত ঝুঁকি থেকে সুরক্ষিত থাকুন নিবন্ধটি দেখুন।

API শুরু করুন

Safe Browsing API ব্যবহার করতে, আপনাকে অবশ্যই initSafeBrowsing কল করে API শুরু করতে হবে এবং এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে হবে। নিম্নলিখিত কোড স্নিপেট একটি উদাহরণ প্রদান করে:

Kotlin

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

জাভা

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

v5-এ, GmsCore Safe Browsing ক্লায়েন্ট অফার করে। আপনাকে অবশ্যই একটি SafeBrowsingClient ইনস্ট্যান্স পেতে হবে। আমরা API সারফেস স্ট্রিমলাইন করেছি যাতে দক্ষতা বাড়ে এবং ব্লট কমে।

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

URL চেক করার অনুরোধ করা

URI কোনও বিপদ ডেকে আনতে পারে কিনা তা চেক করতে lookupUri পদ্ধতি ব্যবহার করুন। আপনাকে অবশ্যই উদ্দিষ্ট প্রোটোকল উল্লেখ করতে হবে, যা স্থানীয় ব্লকলিস্ট (v4) অথবা রিয়েল-টাইম সুরক্ষা (v5) হতে পারে।

URL চেক করার অনুরোধ পাঠান

API-এর সাথে স্কিমের কোনও সম্পর্ক নেই, তাই আপনি স্কিম সহ বা ছাড়া URL পাস করতে পারবেন। যেমন, দুটি

Kotlin

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

জাভা

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

এবং

Kotlin

var url = "www.google.com"

জাভা

String url = "www.google.com";

সঠিক।

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

জাভা

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 সিগনেচার URI, থ্রেটের ধরনের তালিকা এবং প্রোটোকল নেয়।

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!
        }
    }

URL চেক করার উত্তর পড়ুন

ফেরত পাওয়া SafetyNetApi.SafeBrowsingResponse অবজেক্ট ব্যবহার করে, এটির getDetectedThreats মেথড কল করুন, যা SafeBrowsingThreat অবজেক্টের একটি তালিকা ফেরত দেয়। ফেরত পাঠানো তালিকা খালি থাকলে, API কোনও পরিচিত হুমকি শনাক্ত করেনি। তালিকা খালি না থাকলে, API কোন কোন পরিচিত থ্রেট শনাক্ত করেছে তা নির্ধারণ করতে তালিকার প্রতিটি এলিমেন্টে getThreatType কল করুন।

সতর্কতার জন্য সাজেস্ট করা ভাষা দেখতে, Safe Browsing API ডেভেলপার গাইড দেখুন।

আপনার আগ্রহের থ্রেট টাইপ নির্দিষ্ট করুন

SafeBrowsingThreat ক্লাসের কনস্ট্যান্টে বর্তমানে কাজ করে এমন থ্রেটের ধরন রয়েছে:

হুমকির ধরন সংজ্ঞা
TYPE_POTENTIALLY_HARMFUL_APPLICATION এই ধরনের থ্রেট সেইসব পৃষ্ঠার URL শনাক্ত করে যেগুলি সম্ভাব্য ক্ষতিকারক অ্যাপ্লিকেশন হিসেবে ফ্ল্যাগ করা হয়েছে।
TYPE_SOCIAL_ENGINEERING এই ধরনের থ্রেট সেইসব পৃষ্ঠার URL শনাক্ত করে যেগুলি সোশ্যাল ইঞ্জিনিয়ারিং থ্রেট আছে বলে ফ্ল্যাগ করা হয়েছে।

API ব্যবহার করার সময়, আপনি আর্গুমেন্ট হিসেবে থ্রেটের ধরন সংক্রান্ত কনস্ট্যান্ট যোগ করেন। আপনার অ্যাপের জন্য যতগুলি প্রয়োজন ততগুলি থ্রেট টাইপ কনস্ট্যান্ট যোগ করতে পারবেন, তবে আপনি শুধুমাত্র সেইসব কনস্ট্যান্ট ব্যবহার করতে পারবেন যেগুলি বাতিল হিসেবে চিহ্নিত করা হয়নি।

আপনার Safe Browsing সেশন বন্ধ করুন

আপনার অ্যাপকে যদি দীর্ঘ সময় ধরে Safe Browsing API ব্যবহার করতে না হয়, তাহলে আপনার অ্যাপের মধ্যে প্রয়োজনীয় সব URL চেক করুন এবং তারপর shutdownSafeBrowsing পদ্ধতি ব্যবহার করে আপনার Safe Browsing সেশন বন্ধ করুন:

Kotlin

SafetyNet.getClient(this).shutdownSafeBrowsing()

জাভা

SafetyNet.getClient(this).shutdownSafeBrowsing();

আমরা সাজেস্ট করি যে আপনি অ্যাক্টিভিটির onPause পদ্ধতিতে shutdownSafeBrowsing কল করুন এবং অ্যাক্টিভিটির onResume পদ্ধতিতে initSafeBrowsing কল করুন। তবে, lookupUri কল করার আগে initSafeBrowsing-এর এক্সিকিউশন সম্পূর্ণ হয়েছে কিনা তা নিশ্চিত করুন। আপনার সেশন সবসময় ফ্রেশ আছে কিনা তা নিশ্চিত করার মাধ্যমে, আপনার অ্যাপে ইন্টার্নাল সমস্যার সম্ভাবনা কমাতে পারবেন।

রিয়েল-টাইম সুরক্ষা সংক্রান্ত বিবরণ

v5 আপডেটে রিয়েল-টাইম সুরক্ষা মোড চালু করা হয়েছে যা ডেটা পুরনো হয়ে যাওয়ার সমস্যা (v4-এ যা ২০-৫০ মিনিট পর্যন্ত হতে পারে) এড়িয়ে যায়। এটি ডিফল্ট হিসেবে অনুমতি দিন থেকে ডিফল্ট হিসেবে চেক করুন প্রোটোকলে পরিবর্তন করে, যা দ্রুত ছড়িয়ে পড়া বিপদের বিরুদ্ধে সুরক্ষা আরও উন্নত করে। রিয়েল-টাইম মোডে, ক্লায়েন্টরা একটি স্থানীয় ডেটাবেস এবং সম্ভবত-নিরাপদ সাইটের গ্লোবাল ক্যাশে মেইনটেইন করে যাতে সবচেয়ে নতুন থ্রেট ডেটার সাথে প্রায়-রিয়েল-টাইম সুরক্ষা প্রদান করা যায়।

যেসব ধরনের থ্রেট কাজ করে

আপনার প্রয়োজনের জন্য কোন ধরনের থ্রেট গুরুত্বপূর্ণ তা API আপনাকে বেছে নিতে দেয়। v5 API আরও অনেক ধরনের থ্রেট শনাক্ত করতে পারে:

হুমকির ধরন সংক্রান্ত কনস্ট্যান্ট বর্ণনা
NO_THREAT কোনও বিপদ নেই।
TYPE_MALWARE সাধারণ ম্যালওয়্যার সংক্রান্ত ঝুঁকি।
TYPE_UNWANTED_SOFTWARE অবাঞ্ছিত সফ্টওয়্যার বা অ্যাপ্লিকেশন।
TYPE_POTENTIALLY_HARMFUL_APPLICATION যেসব অ্যাপ ডিভাইস বা ব্যবহারকারীর ক্ষতি করতে পারে।
TYPE_SOCIAL_ENGINEERING ফিশিং এবং অন্যান্য প্রতারণামূলক সাইট।
TYPE_TRICK_TO_BILL এমন পৃষ্ঠা যা ব্যবহারকারীদের বিলিং সংক্রান্ত অ্যাকশন নিতে বাধ্য করে।
TYPE_BETTER_ADS_VIOLATION বিজ্ঞাপনের উন্নত স্ট্যান্ডার্ড লঙ্ঘনকারী সাইট।
TYPE_MALWARE_OFFLINE অফলাইন ম্যালওয়্যার।
TYPE_ABUSIVE_EXPERIENCE_VIOLATION যেসব লঙ্ঘনের ফলে ব্যবহারকারীর অভিজ্ঞতা খারাপ হয়।
TYPE_HIGH_CONFIDENCE_ALLOW_LIST বেশি-নির্ভরযোগ্য অনুমোদিত তালিকা

SafetyNet Safe Browsing API-এর মাধ্যমে সংগ্রহ করা ডেটা

SafetyNet Safe Browsing API, Android-এ Safe Browsing পরিষেবার সাথে যোগাযোগ করার সময় অটোমেটিক নিম্নলিখিত ডেটা সংগ্রহ করে:

ডেটা বর্ণনা
অ্যাপ অ্যাক্টিভিটি ক্ষতিকর URL শনাক্ত করার উদ্দেশ্যে স্থানীয় হ্যাশ প্রিফিক্স ম্যাচ করার পরে URL-এর হ্যাশ প্রিফিক্স সংগ্রহ করে।

SafetyNet Safe Browsing API ক্ষতিকর URL শনাক্ত করার জন্য URL-এর হ্যাশ প্রিফিক্স সংগ্রহ করে। ভার্সন ৫ এই লুকআপের সময় ব্যবহারকারীর ডেটা আরও সুরক্ষিত করতে Oblivious HTTP প্রয়োগ করে।

আমরা যতটা সম্ভব স্বচ্ছ থাকার চেষ্টা করি, তবে আপনার অ্যাপের ব্যবহারকারীর ডেটা সংগ্রহ, শেয়ারিং এবং নিরাপত্তা সংক্রান্ত অনুশীলনের ব্যাপারে Google Play-এর ডেটা নিরাপত্তা বিভাগ ফর্ম-এর উত্তর কীভাবে দেবেন তা নির্ধারণ করার সম্পূর্ণ দায়িত্ব আপনার।