সেফটিনেট সেফ ব্রাউজিং এপিআই

সেফটিনেট সেফ ব্রাউজিং এপিআই, যা গুগল প্লে সার্ভিসেস দ্বারা চালিত একটি লাইব্রেরি, কোনো ইউআরএল গুগল কর্তৃক জ্ঞাত হুমকি হিসেবে চিহ্নিত হয়েছে কিনা তা নির্ধারণ করার পরিষেবা প্রদান করে।

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

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

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

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

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

একটি অ্যান্ড্রয়েড এপিআই কী-এর জন্য অনুরোধ ও নিবন্ধন করুন

সেফ ব্রাউজিং এপিআই ব্যবহার করার আগে, একটি অ্যান্ড্রয়েড এপিআই কী তৈরি ও রেজিস্টার করুন। নির্দিষ্ট ধাপগুলোর জন্য, সেফ ব্রাউজিং শুরু করার পৃষ্ঠাটি দেখুন।

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

SafetyNet API নির্ভরতা যোগ করুন

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

এপিআই শুরু করুন

সেফ ব্রাউজিং এপিআই ব্যবহার করার জন্য, আপনাকে অবশ্যই initSafeBrowsing কল করে এপিআইটি ইনিশিয়ালাইজ করতে হবে এবং এর কাজ শেষ হওয়া পর্যন্ত অপেক্ষা করতে হবে। নিচের কোড স্নিপেটটিতে একটি উদাহরণ দেওয়া হলো:

কোটলিন

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

জাভা

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

v5-এ, GmsCore সেফ ব্রাউজিং ক্লায়েন্ট অফার করছে। আপনাকে অবশ্যই একটি 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 যাচাইয়ের অনুরোধ পাঠান

এপিআইটি ব্যবহৃত স্কিমের ওপর নির্ভরশীল নয়, তাই আপনি স্কিম সহ বা স্কিম ছাড়াই ইউআরএলটি পাস করতে পারেন। উদাহরণস্বরূপ, উভয়

কোটলিন

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

জাভা

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

এবং

কোটলিন

var url = "www.google.com"

জাভা

String url = "www.google.com";

বৈধ।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি URL চেক অনুরোধ পাঠাতে হয়:

কোটলিন

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 কল করুন।

প্রস্তাবিত সতর্কীকরণ ভাষা দেখতে, সেফ ব্রাউজিং এপিআই ডেভেলপারস গাইড দেখুন।

আগ্রহের হুমকির ধরণগুলো নির্দিষ্ট করুন।

SafeBrowsingThreat ক্লাসের কনস্ট্যান্টগুলোতে বর্তমানে সমর্থিত থ্রেট টাইপগুলো রয়েছে:

হুমকির ধরণ সংজ্ঞা
TYPE_POTENTIALLY_HARMFUL_APPLICATION এই ধরনের হুমকি এমন পেজগুলোর ইউআরএল শনাক্ত করে, যেগুলোকে সম্ভাব্য ক্ষতিকর অ্যাপ্লিকেশন ধারণকারী হিসেবে চিহ্নিত করা হয়েছে।
TYPE_SOCIAL_ENGINEERING এই ধরনের হুমকি সেইসব পেজের ইউআরএল শনাক্ত করে, যেগুলোকে সোশ্যাল ইঞ্জিনিয়ারিং হুমকিযুক্ত হিসেবে চিহ্নিত করা হয়েছে।

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

আপনার নিরাপদ ব্রাউজিং সেশন বন্ধ করুন

যদি আপনার অ্যাপ দীর্ঘ সময়ের জন্য সেফ ব্রাউজিং এপিআই ব্যবহার করার প্রয়োজন না হয়, তাহলে আপনার অ্যাপের মধ্যে থাকা সমস্ত প্রয়োজনীয় ইউআরএল চেক করুন এবং তারপরে shutdownSafeBrowsing মেথডটি ব্যবহার করে আপনার সেফ ব্রাউজিং সেশনটি বন্ধ করে দিন:

কোটলিন

SafetyNet.getClient(this).shutdownSafeBrowsing()

জাভা

SafetyNet.getClient(this).shutdownSafeBrowsing();

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

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

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

সমর্থিত হুমকির প্রকারভেদ

এপিআই আপনাকে আপনার প্রয়োজনের জন্য কোন ধরনের হুমকি গুরুত্বপূর্ণ তা বেছে নিতে দেয়। v5 এপিআই আরও বিস্তৃত পরিসরের হুমকির ধরন সমর্থন করে:

হুমকির ধরণ ধ্রুবক বর্ণনা
কোনো হুমকি নেই কোনো হুমকি নেই।
ম্যালওয়্যারের ধরণ সাধারণ ম্যালওয়্যার হুমকি।
অবাঞ্ছিত সফটওয়্যারের ধরণ অবাঞ্ছিত সফটওয়্যার বা অ্যাপ্লিকেশন।
সম্ভাব্য ক্ষতিকর প্রয়োগের ধরণ যেসব অ্যাপ ডিভাইস বা ব্যবহারকারীর ক্ষতি করতে পারে।
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, Android-এর Safe Browsing পরিষেবার সাথে যোগাযোগ করার সময় স্বয়ংক্রিয়ভাবে নিম্নলিখিত ডেটা সংগ্রহ করে:

ডেটা বর্ণনা
অ্যাপ কার্যকলাপ ক্ষতিকারক ইউআরএল শনাক্ত করার উদ্দেশ্যে, স্থানীয় হ্যাশ প্রিফিক্স মিলে যাওয়ার পর ইউআরএলগুলোর হ্যাশ প্রিফিক্স সংগ্রহ করে।

সেফটিনেট সেফ ব্রাউজিং এপিআই ক্ষতিকারক ইউআরএল শনাক্ত করার জন্য ইউআরএল-এর হ্যাশ প্রিফিক্স সংগ্রহ করে। এই অনুসন্ধান প্রক্রিয়া চলাকালীন ব্যবহারকারীর ডেটা আরও সুরক্ষিত করতে সংস্করণ ৫-এ অবলিভিয়াস এইচটিটিপি প্রয়োগ করা হয়েছে।

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