تخزين مؤقت

ينطبق هذا المستند على الطرق التالية:

لمحة عن التخزين المؤقت

للحدّ من استخدام معدل نقل البيانات للعميل ولحماية Google من تكدس البيانات، يُطلب من عملاء كل من Lookup API وUpdate API إنشاء ذاكرة تخزين مؤقت محلية لبيانات التهديدات وصيانتها. بالنسبة إلى Lookup API، يتم استخدام ذاكرة التخزين المؤقت لتقليل عدد طلبات threatMatches التي يرسلها العملاء إلى Google. بالنسبة إلى واجهة برمجة التطبيقات الخاصة بالتحديث، يتم استخدام ذاكرة التخزين المؤقت لتقليل عدد طلبات fullHashes التي يرسلها العملاء إلى Google. تم توضيح بروتوكول التخزين المؤقت لكل واجهة برمجة تطبيقات أدناه.

واجهة برمجة تطبيقات Lookup

على عملاء واجهة برمجة التطبيقات Lookup API تخزين كل عنصر ThreatMatch تم عرضه في ذاكرة التخزين المؤقت طوال المدة المحدّدة في الحقل cacheDuration. بعد ذلك، يحتاج العملاء إلى الرجوع إلى ذاكرة التخزين المؤقت قبل تقديم طلب threatMatches لاحق إلى الخادم. إذا لم تنتهِ صلاحية مدة التخزين المؤقت لـ ThreatMatch الذي تم عرضه في السابق بعد، يجب أن يفترض العميل أنّ العنصر لا يزال غير آمن. قد يؤدي التخزين المؤقت لعناصر ThreatMatch إلى تقليل عدد طلبات واجهة برمجة التطبيقات التي أجراها العميل.

مثال: usermatchs.find

انقر على روابط الطلب والاستجابة في عنوان الجدول للحصول على أمثلة كاملة.

طلب التحقّق من عنوان URL
طلب threatMatch
عنوان URL مطابق
threatMatches Response
سلوك التخزين المؤقت
"threatEntries": [
 {"url": "http://www.urltocheck.org/"}
]
"matches": [{
 "threat": {"url": "http://www.urltocheck.org/"},
 "cacheDuration": "300.000s"
}]
المطابقة
يجب أن ينتظر العميل 5 دقائق قبل إرسال طلب threatMatches جديد يتضمّن عنوان URL التالي: http://www.urltocheck.org/.

تحديث واجهة برمجة التطبيقات

لتقليل العدد الإجمالي لطلبات fullHashes المُرسَلة إلى Google باستخدام واجهة برمجة التطبيقات Update 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 دقائق ومدة تخزين مؤقت سالبة تبلغ ساعة واحدة.

إنّ مدة ذاكرة التخزين المؤقت الموجبة التي تبلغ 5 دقائق توضّح للعميل المدة التي يجب أن تعتبر فيها التجزئة الكاملة H(example.com/) غير آمنة بدون إرسال طلب fullHashes آخر. وبعد مرور 5 دقائق، على العميل إصدار طلب fullHashes آخر للبادئة h(example.com/) في حال زار العميل example.com/ مرة أخرى. على العميل إعادة ضبط مدة ذاكرة التخزين المؤقت السالبة لبادئة التجزئة وفقًا للاستجابة الجديدة.

تخبر مدة ذاكرة التخزين المؤقت السالبة التي تبلغ ساعة واحدة العميل بالمدة التي يجب فيها اعتبار جميع التجزئات الأخرى الكاملة إلى جانب H(example.com/) التي تشترك في نفس بادئة h(example.com/) آمنة. لمدة ساعة واحدة، يجب اعتبار كل عنوان URL على النحو التالي h(URL) = h(example.com/) آمنًا، وبالتالي لا ينتج عنه طلب fullHashes (بافتراض أنّ H(URL) != H(example.com/)).

إذا لم تحتوي استجابة fullHashes على أي مطابقات وتم ضبط مدة ذاكرة التخزين المؤقت السلبية، يجب ألا يصدر العميل أي طلبات fullHashes لأي من البادئات المطلوبة خلال مدة ذاكرة التخزين المؤقت السلبية المحدّدة.

إذا كانت استجابة fullHashes تحتوي على مطابقة واحدة أو أكثر، سيستمر ضبط مدة ذاكرة التخزين المؤقت السالبة للاستجابة بأكملها. في هذه الحالة، تشير مدة ذاكرة التخزين المؤقت لتجزئة واحدة كاملة إلى المدة التي يجب أن يفترض العميل خلالها أن تكون هذه التجزئة بالطول الكامل غير آمنة. بعد انقضاء مدة ذاكرة التخزين المؤقت ThreatMatch، على العميل إعادة تحميل التجزئة الكاملة من خلال إصدار طلب fullHashes لبادئة التجزئة هذه إذا كان عنوان URL المطلوب يطابق التجزئة الحالية بالطول الكامل في ذاكرة التخزين المؤقت. في هذه الحالة، لا تنطبق مدة ذاكرة التخزين المؤقت السالبة. لا تنطبق مدة ذاكرة التخزين المؤقت السالبة للاستجابة إلا على علامات التجزئة بالطول الكامل التي لم تكن متوفّرة في استجابة fullHashes. بالنسبة إلى علامات التجزئة الكاملة غير المضمّنة في الاستجابة، على العميل الامتناع عن إصدار أي طلبات fullHashes إلى أن تنقضي مدة ذاكرة التخزين المؤقت السالبة.

مثال: newHashes.find

انقر على روابط الطلب والاستجابة في عنوان الجدول للحصول على أمثلة كاملة.

بادئات التجزئة
طلبfullHash
قيمة التجزئة الكاملة تتطابق مع
استجابة كاملة للتجزئة
سلوك التخزين المؤقت
"threatEntries": [
  {"hash": "0xaaaaaaaa"}
]
"matches": [],
"negativeCacheDuration": "3600.000s"
لا يتوفّر محتوى مطابق.
يجب ألا يرسل العميل أي طلبات fullHashes لبادئة التجزئة 0xaaaaaaa لمدة ساعة واحدة على الأقل. تُعتبر أي تجزئة ذات البادئة 0xaaaaaaa آمنة لمدة ساعة واحدة.
"threatEntries": [
  {"hash": "0xbbbbbbbb"}
]
"matches": [
 "threat": {"hash": "0xbbbbbbbb0000..."}
 "cacheDuration": "600.000s",
],
"negativeCacheDuration": "300.000s"
التطابقات المحتملة.
يجب أن يعتبر العميل عنوان URL الذي يحتوي على التجزئة الكاملة 0xbbbbbb0000...غير آمن لمدة 10 دقائق. يجب أن يعتبر العميل جميع عناوين URL الأخرى ذات بادئة التجزئة 0xbbbbbbbb بأنّها آمنة لمدة 5 دقائق. بعد 5 دقائق، ستنتهي صلاحية إدخال ذاكرة التخزين المؤقت السالب لبادئات التجزئة. بما أنّ صلاحية إدخال ذاكرة التخزين المؤقت الإيجابية لـ 0xbbbbbb0000... لم تنتهِ صلاحيته بعد، على العميل إرسال طلبات fullHashes لجميع علامات التجزئة ما عدا تلك العلامة.
"threatEntries": [
  {"hash": "0xcccccccc"}
]
"matches": [
 "threat": {"hash": "0xccccccccdddd..."},
 "cacheDuration": "600.000s"
],
"negativeCacheDuration": "3600.000s"
التطابقات المحتملة.
يجب ألا يرسل العميل أي طلب fullHashes لبادئة التجزئة 0xcccccccc لمدة لا تقل عن ساعة واحدة ويفترض أن تكون هذه البادئة آمنة، إلا إذا كانت التجزئة الكاملة لعنوان URL مطابقة للتجزئة الكاملة المخزّنة مؤقتًا 0xccccccccdddd.... في هذه الحالة، يجب أن يعتبر العميل عنوان URL هذا غير آمن لمدة 10 دقائق. تنتهي صلاحية التجزئة بالطول الكامل بعد 10 دقائق. ومن المفترض أن تؤدي أي عمليات بحث لاحقة عن التجزئة الكاملة هذه إلى تشغيل طلب fullHashes جديد.