Real Time Mode

وقتی کلاینت‌ها تصمیم می‌گیرند از Google Safe Browsing v5 در حالت بلادرنگ استفاده کنند، کلاینت‌ها موارد زیر را در پایگاه داده محلی خود نگهداری خواهند کرد: (۱) یک حافظه پنهان سراسری از سایت‌های احتمالاً بی‌خطر، که به صورت هش‌های SHA256 از عبارات URL پسوند میزبان/پیشوند مسیر قالب‌بندی شده‌اند، (۲) مجموعه‌ای از لیست‌های تهدید، که به صورت پیشوندهای هش SHA256 از عبارات URL پسوند میزبان/پیشوند مسیر قالب‌بندی شده‌اند. ایده سطح بالا این است که هر زمان کلاینت بخواهد یک URL خاص را بررسی کند، یک بررسی محلی با استفاده از حافظه پنهان سراسری انجام می‌شود. اگر این بررسی با موفقیت انجام شود، یک بررسی لیست تهدیدهای محلی انجام می‌شود. در غیر این صورت، کلاینت با بررسی هش بلادرنگ، همانطور که در زیر توضیح داده شده است، ادامه می‌دهد.

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

مشخصات دقیق این روش در زیر موجود است.

روش بررسی URL در لحظه

این رویه یک URL واحد u را دریافت می‌کند و مقادیر SAFE ، UNSAFE یا UNSURE را برمی‌گرداند. اگر SAFE را برگرداند، URL توسط Google Safe Browsing ایمن تلقی می‌شود. اگر UNSAFE را برگرداند، URL توسط Google Safe Browsing بالقوه ناامن تلقی می‌شود و باید اقدامات مناسب انجام شود: مانند نمایش هشدار به کاربر نهایی، انتقال پیام دریافتی به پوشه هرزنامه یا درخواست تأیید اضافی توسط کاربر قبل از ادامه. اگر UNSURE را برگرداند، رویه بررسی محلی زیر باید بعداً استفاده شود.

  1. فرض کنید expressions فهرستی از عبارات پسوند/پیشوند تولید شده توسط URL u باشند.
  2. فرض کنید expressionHashes یک لیست باشد که عناصر آن، هش‌های SHA256 هر عبارت در expressions هستند.
  3. برای هر hash از expressionHashes :
    1. اگر hash در حافظه پنهان سراسری یافت شود، UNSURE برمی‌گرداند.
  4. فرض کنید expressionHashPrefixes یک لیست باشد که عناصر آن، ۴ بایت اول هر هش در expressionHashes هستند.
  5. برای هر expressionHashPrefix از expressionHashPrefixes :
    1. expressionHashPrefix در حافظه پنهان محلی جستجو کنید.
    2. اگر ورودی ذخیره شده پیدا شد:
      1. تعیین کنید که آیا زمان فعلی از زمان انقضای آن بزرگتر است یا خیر.
      2. اگر بیشتر باشد:
        1. ورودی کش شده‌ی پیدا شده را از کش محلی حذف کن.
        2. با حلقه ادامه دهید.
      3. اگر بزرگتر نباشد:
        1. این expressionHashPrefix خاص را از expressionHashPrefixes حذف کنید.
        2. بررسی کنید که آیا هش کامل مربوطه در expressionHashes در ورودی ذخیره شده یافت می‌شود یا خیر.
        3. در صورت یافتن، UNSAFE را برگردانید.
        4. اگر پیدا نشد، به حلقه ادامه دهید.
    3. اگر ورودی ذخیره شده در حافظه پنهان پیدا نشد، حلقه را ادامه دهید.
  6. ارسال expressionHashPrefixes به سرور مرور ایمن گوگل نسخه ۵ با استفاده از RPC SearchHashes یا متد REST hashes.search . اگر خطایی رخ داد (از جمله خطاهای شبکه، خطاهای HTTP و غیره)، UNSURE را برگردانید. در غیر این صورت، مقدار response را برابر با response دریافتی از سرور SB قرار دهید که لیستی از هش‌های کامل به همراه برخی اطلاعات کمکی است که ماهیت تهدید (مهندسی اجتماعی، بدافزار و غیره) و همچنین زمان انقضای حافظه پنهان expiration مشخص می‌کند.
  7. برای هر fullHash از response :
    1. دستور fullHash به همراه expiration در حافظه پنهان محلی قرار دهید.
  8. برای هر fullHash از response :
    1. فرض کنید isFound نتیجه یافتن fullHash در expressionHashes باشد.
    2. اگر isFound برابر با False باشد، حلقه را ادامه بده.
    3. اگر isFound برابر با True باشد، مقدار UNSAFE را برمی‌گرداند.
  9. بازگشت SAFE .

اگرچه این پروتکل مشخص می‌کند که کلاینت چه زمانی expressionHashPrefixes به سرور ارسال می‌کند، اما عمداً نحوه‌ی ارسال دقیق آنها را مشخص نمی‌کند. به عنوان مثال، ارسال تمام expressionHashPrefixes در یک درخواست برای کلاینت قابل قبول است، و همچنین ارسال هر پیشوند جداگانه در expressionHashPrefixes به سرور در درخواست‌های جداگانه (شاید به صورت موازی) نیز قابل قبول است. همچنین ارسال پیشوندهای هش نامرتبط یا تصادفی به همراه پیشوندهای هش در expressionHashPrefixes برای کلاینت قابل قبول است، به شرطی که تعداد پیشوندهای هش ارسال شده در یک درخواست از 30 تجاوز نکند.