ذخیره سازی

این سند برای روش های زیر اعمال می شود:

درباره کش

برای کاهش استفاده از پهنای باند مشتری و محافظت از Google در برابر افزایش ترافیک، مشتریان هر دو API Lookup و Update API ملزم به ایجاد و نگهداری حافظه پنهان محلی از داده‌های تهدید هستند. برای Lookup API، حافظه پنهان برای کاهش تعداد درخواست‌های threatMatches که مشتریان به Google ارسال می‌کنند، استفاده می‌شود. برای Update API، حافظه پنهان برای کاهش تعداد درخواست‌های fullHashes که مشتریان به Google ارسال می‌کنند، استفاده می‌شود. پروتکل کش برای هر API در زیر مشخص شده است.

جستجوی API

کلاینت های Lookup API باید هر مورد ThreatMatch بازگشتی را برای مدت زمانی که توسط فیلد cacheDuration آن تعریف شده است، در حافظه پنهان نگه دارند. پس از آن، کلاینت‌ها باید قبل از درخواست بعدی threatMatches با سرور، با کش مشورت کنند. اگر مدت زمان کش برای ThreatMatch قبلاً بازگردانده شده هنوز منقضی نشده باشد، مشتری باید فرض کند که مورد هنوز ایمن نیست. ذخیره موارد ThreatMatch ممکن است تعداد درخواست های API ارائه شده توسط مشتری را کاهش دهد.

مثال: gefMatches.find

برای مثال های کامل روی پیوندهای درخواست و پاسخ در سرفصل جدول کلیک کنید.

بررسی URL
درخواست تطبیق تهدید
URL مطابقت دارد
پاسخ به تهدیدات
رفتار حافظه پنهان
"threatEntries": [
 {"url": "http://www.urltocheck.org/"}
]
"matches": [{
 "threat": {"url": "http://www.urltocheck.org/"},
 "cacheDuration": "300.000s"
}]
همخوانی داشتن.
مشتری باید 5 دقیقه صبر کند قبل از ارسال یک درخواست threatMatches جدید که شامل URL http://www.urltocheck.org/ است.

به روز رسانی API

برای کاهش تعداد کلی درخواست‌های fullHashes ارسال شده به Google با استفاده از Update API، مشتریان باید یک حافظه پنهان محلی را حفظ کنند. API دو نوع حافظه پنهان، مثبت و منفی ایجاد می کند.

ذخیره سازی مثبت

برای جلوگیری از پرسیدن مکرر مشتریان در مورد وضعیت یک هش کامل ناامن خاص، هر ThreatMatch بازگشتی حاوی یک مدت زمان کش مثبت (که توسط قسمت cacheDuration تعریف شده است)، که نشان می دهد چه مدت باید هش کامل ناامن در نظر گرفته شود.

کش منفی

برای جلوگیری از پرسیدن مکرر مشتریان در مورد وضعیت یک هش کامل امن خاص، هر پاسخ fullHashes یک مدت زمان کش منفی برای پیشوند درخواستی تعریف می کند (تعریف شده توسط فیلد negativeCacheDuration ). این مدت زمان نشان می دهد که چه مدت باید تمام هش های کامل با پیشوند درخواستی برای لیست های درخواستی ایمن در نظر گرفته شوند، به جز مواردی که سرور به عنوان ناامن برگردانده است. این ذخیره سازی از اهمیت ویژه ای برخوردار است زیرا از اضافه بار ترافیکی که می تواند در اثر برخورد پیشوند هش با URL ایمن که ترافیک زیادی دریافت می کند ایجاد شود، جلوگیری می کند.

مشاوره کش

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

اول، مشتریان باید برای ضربه پنهان حافظه پنهان بررسی کنند. اگر یک ورودی کش مثبت منقضی نشده برای هش کامل مورد علاقه وجود داشته باشد، باید ناامن در نظر گرفته شود. اگر ورودی حافظه پنهان مثبت منقضی شده باشد، مشتری باید یک درخواست fullHashes برای پیشوند محلی مرتبط ارسال کند. طبق پروتکل، اگر سرور هش کامل را برگرداند، ناامن در نظر گرفته می شود. در غیر این صورت، ایمن در نظر گرفته می شود.

اگر هیچ ورودی کش مثبتی برای هش کامل وجود نداشته باشد، کلاینت باید ضربه کش منفی را بررسی کند. اگر یک ورودی کش منفی منقضی نشده برای پیشوند محلی مرتبط وجود داشته باشد، هش کامل امن در نظر گرفته می شود. اگر ورودی کش منفی منقضی شده باشد، یا وجود نداشته باشد، مشتری باید یک درخواست fullHashes برای پیشوند محلی مرتبط ارسال کند و پاسخ را عادی تفسیر کند.

در حال به روز رسانی کش

کش کلاینت باید هر زمان که یک پاسخ fullHashes دریافت شد به روز شود. یک ورودی کش مثبت باید برای هش کامل در فیلد cacheDuration ایجاد یا به روز شود. مدت زمان کش منفی پیشوند هش نیز باید در قسمت negativeCacheDuration پاسخ ایجاد یا به روز شود.

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

سناریوی نمونه

در مثال زیر، فرض کنید h(url) پیشوند هش URL و H(url) هش کامل URL است. یعنی h(url) = SHA256(url).substr(4)، H(url) = SHA256(url).

حال، فرض کنید یک کلاینت (با یک کش خالی) از example.com/ بازدید می کند و می بیند که h(example.com/) در پایگاه داده محلی است. مشتری هش کامل را برای پیشوند هش h(example.com/) درخواست می کند و هش کامل H(example.com/) را همراه با مدت زمان کش مثبت 5 دقیقه و مدت زمان کش منفی 1 ساعت پس می گیرد. .

مدت زمان کش مثبت 5 دقیقه به مشتری می گوید که چه مدت هش کامل H(example.com/) باید بدون ارسال درخواست fullHashes دیگر ناامن در نظر گرفته شود. پس از 5 دقیقه، اگر مشتری دوباره از example.com/ بازدید کند، مشتری باید یک درخواست fullHashes دیگر برای آن پیشوند h(example.com/) صادر کند. مشتری باید مدت زمان کش منفی پیشوند هش را در هر پاسخ جدید بازنشانی کند.

مدت زمان کش منفی 1 ساعت به مشتری می گوید که چه مدت باید تمام هش های تمام قد به غیر از H(example.com/) که پیشوند یکسانی h(example.com/) دارند، ایمن در نظر گرفته شوند. برای مدت 1 ساعت، هر URL به گونه‌ای که h(URL) = h(example.com/) باید ایمن در نظر گرفته شود، و بنابراین منجر به درخواست fullHashes نمی‌شود (با فرض اینکه H(URL) != H(example.com /)).

اگر پاسخ fullHashes حاوی صفر منطبق باشد و مدت زمان کش منفی تنظیم شده باشد، کلاینت نباید برای هیچ یک از پیشوندهای درخواستی برای مدت زمان کش منفی داده شده، درخواست fullHashes صادر کند.

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

مثال: fullHashes.find

برای مثال های کامل روی پیوندهای درخواست و پاسخ در سرفصل جدول کلیک کنید.

پیشوندهای هش
درخواست fullHashs
مسابقات هش تمام قد
پاسخ fullHashes
رفتار حافظه پنهان
"threatEntries": [
  {"hash": "0xaaaaaaaa"}
]
"matches": [],
"negativeCacheDuration": "3600.000s"
مطابقت ندارد.
مشتری نباید برای حداقل یک ساعت هیچ درخواست fullHashes برای پیشوند هش 0xaaaaaaaa ارسال کند. هر هش با پیشوند 0xaaaaaaaa به مدت یک ساعت بی خطر در نظر گرفته می شود.
"threatEntries": [
  {"hash": "0xbbbbbbbb"}
]
"matches": [
 "threat": {"hash": "0xbbbbbbbb0000..."}
 "cacheDuration": "600.000s",
],
"negativeCacheDuration": "300.000s"
مسابقات احتمالی
مشتری باید URL را با هش کامل 0xbbbbbbbb0000… برای 10 دقیقه ناامن در نظر بگیرد. مشتری باید همه URL های دیگر با پیشوند هش 0xbbbbbbbb را به مدت 5 دقیقه امن در نظر بگیرد. پس از 5 دقیقه، ورودی کش منفی پیشوندهای هش منقضی می شود. از آنجایی که ورودی cache مثبت برای 0xbbbbbbbb0000… هنوز منقضی نشده است، مشتری باید برای همه هش ها به جز آن یک درخواست fullHashes ارسال کند.
"threatEntries": [
  {"hash": "0xcccccccc"}
]
"matches": [
 "threat": {"hash": "0xccccccccdddd..."},
 "cacheDuration": "600.000s"
],
"negativeCacheDuration": "3600.000s"
مسابقات احتمالی
کلاینت نباید هیچ درخواست fullHashes برای پیشوند هش 0xcccccccc حداقل به مدت 1 ساعت ارسال کند و آن پیشوند را ایمن فرض کند - مگر اینکه هش کامل URL با هش کامل ذخیره شده 0xccccccccdddd مطابقت داشته باشد... در این صورت مشتری باید آن URL را در نظر بگیرد. تا 10 دقیقه ناامن باشد. پس از 10 دقیقه هش کامل منقضی می شود. هر جستجوی بعدی برای آن هش کامل باید یک درخواست fullHashes جدید ایجاد کند.