SafetyNet Safe Browsing API

SafetyNet Safe Browsing API، کتابخانه‌ای که توسط سرویس‌های Google Play ارائه می‌شود، خدماتی را برای تعیین اینکه آیا URL به‌عنوان یک تهدید شناخته شده توسط Google علامت‌گذاری شده است یا خیر، ارائه می‌کند.

برنامه شما می تواند از این API برای تعیین اینکه آیا یک URL خاص توسط Google به عنوان یک تهدید شناخته شده طبقه بندی شده است یا خیر استفاده کند. در داخل، SafetyNet یک کلاینت برای پروتکل شبکه مرور ایمن نسخه 4 توسعه یافته توسط Google پیاده سازی می کند. هم کد کلاینت و هم پروتکل شبکه v4 برای حفظ حریم خصوصی کاربران و کاهش مصرف باتری و پهنای باند به حداقل رسیده است. از این API برای استفاده کامل از سرویس مرور ایمن گوگل در اندروید به بهینه ترین روش و بدون اجرای پروتکل شبکه آن استفاده کنید.

این سند نحوه استفاده از SafetyNet Safe Browsing Lookup API برای بررسی یک URL برای تهدیدات شناخته شده را توضیح می دهد.

شرایط خدمات

با استفاده از Safe Browsing API، موافقت خود را با رعایت شرایط خدمات اعلام می‌کنید. لطفاً قبل از دسترسی به Safe Browsing API همه شرایط و خط‌مشی‌های قابل اجرا را بخوانید و درک کنید.

یک کلید API Android را درخواست و ثبت کنید

قبل از استفاده از Safe Browsing API، یک کلید API Android ایجاد و ثبت کنید. برای مراحل خاص، به صفحه شروع به کار با مرور ایمن مراجعه کنید.

وابستگی SafetyNet API را اضافه کنید

قبل از استفاده از Safe Browsing API، SafetyNet API را به پروژه خود اضافه کنید. اگر از Android Studio استفاده می کنید، این وابستگی را به فایل Gradle در سطح برنامه خود اضافه کنید. برای اطلاعات بیشتر، به محافظت در برابر تهدیدات امنیتی با SafetyNet مراجعه کنید.

API را راه اندازی کنید

برای استفاده از Safe Browsing API، باید API را با فراخوانی initSafeBrowsing() مقداردهی اولیه کنید و منتظر بمانید تا کامل شود. قطعه کد زیر یک مثال را ارائه می دهد:

کاتلین

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

جاوا

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

درخواست بررسی URL

برنامه شما می‌تواند از بررسی نشانی وب برای تعیین اینکه آیا نشانی اینترنتی تهدیدی شناخته شده است یا خیر، استفاده کند. برخی از انواع تهدید ممکن است برای برنامه خاص شما جالب نباشند. API به شما این امکان را می دهد که انتخاب کنید کدام نوع تهدید برای نیازهای شما مهم است. می توانید چندین نوع تهدید شناخته شده را مشخص کنید.

درخواست بررسی URL را ارسال کنید

API نسبت به طرح مورد استفاده آگنوستیک است، بنابراین می توانید 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());
               }
           }
   });

پاسخ بررسی URL را بخوانید

با استفاده از شی SafetyNetApi.SafeBrowsingResponse برگشتی، متد getDetectedThreats() آن را فراخوانی کنید، که لیستی از اشیاء SafeBrowsingThreat را برمی گرداند. اگر لیست برگشتی خالی باشد، API هیچ تهدید شناخته شده ای را شناسایی نکرده است. اگر لیست خالی نیست، getThreatType() روی هر عنصر در لیست فراخوانی کنید تا مشخص شود که API کدام تهدیدات شناخته شده را شناسایی کرده است.

برای دیدن زبان هشدار پیشنهادی، به راهنمای برنامه‌نویس API مرور ایمن مراجعه کنید.

انواع تهدید مورد علاقه را مشخص کنید

ثابت‌های کلاس SafeBrowsingThreat شامل انواع تهدیدات پشتیبانی‌شده فعلی هستند:

نوع تهدید تعریف
TYPE_POTENTIALLY_HARMFUL_APPLICATION این نوع تهدید، نشانی‌های اینترنتی صفحاتی را که به عنوان حاوی برنامه‌های بالقوه مضر پرچم‌گذاری شده‌اند، شناسایی می‌کند.
TYPE_SOCIAL_ENGINEERING این نوع تهدید، نشانی‌های اینترنتی صفحاتی را که به عنوان حاوی تهدیدات مهندسی اجتماعی پرچم‌گذاری شده‌اند، شناسایی می‌کند.

هنگام استفاده از API، ثابت های نوع تهدید را به عنوان آرگومان اضافه می کنید. می‌توانید هر تعداد ثابت نوع تهدید را که برنامه شما نیاز دارد اضافه کنید، اما فقط می‌توانید از ثابت‌هایی استفاده کنید که به‌عنوان منسوخ علامت‌گذاری نشده‌اند.

جلسه مرور ایمن خود را خاموش کنید

اگر برنامه شما نیازی به استفاده طولانی مدت از Safe Browsing API ندارد، همه URL های لازم را در برنامه خود بررسی کنید و سپس با استفاده از روش shutdownSafeBrowsing() جلسه مرور ایمن خود را خاموش کنید:

کاتلین

SafetyNet.getClient(this).shutdownSafeBrowsing()

جاوا

SafetyNet.getClient(this).shutdownSafeBrowsing();

توصیه می کنیم که shutdownSafeBrowsing() را در متد onPause() Activity خود و initSafeBrowsing() در متد onResume() Activity خود فراخوانی کنید. با این حال، قبل از فراخوانی lookupUri() مطمئن شوید که اجرای initSafeBrowsing() به پایان رسیده است. با اطمینان از اینکه جلسه شما همیشه تازه است، احتمال خطاهای داخلی در برنامه خود را کاهش می دهید.

داده های جمع آوری شده توسط SafetyNet Safe Browsing API

SafetyNet Safe Browsing API داده‌های زیر را به‌طور خودکار هنگام برقراری ارتباط با سرویس مرور ایمن در Android جمع‌آوری می‌کند:

داده ها توضیحات
فعالیت برنامه پیشوند هش URL ها را پس از تطبیق پیشوند هش محلی به منظور شناسایی URL های مخرب جمع آوری می کند.

در حالی که هدف ما شفاف‌سازی تا حد امکان است، شما تنها مسئول تصمیم‌گیری در مورد نحوه پاسخگویی به فرم بخش ایمنی داده‌های Google Play در رابطه با جمع‌آوری، اشتراک‌گذاری و شیوه‌های امنیتی داده‌های کاربر برنامه خود هستید.