שמירה במטמון
המסמך הזה רלוונטי לשיטות הבאות:
מידע על שמירה במטמון
כדי לצמצם את השימוש ברוחב הפס של הלקוח וכדי להגן על Google מפני עליות חדות בתנועה, לקוחות של Lookup API ושל Update API נדרשים ליצור ולתחזק מטמון מקומי של נתוני איומים. ה-Lookup API משתמש במטמון כדי לצמצם את מספר הבקשות של לקוחות שנשלחות אל Google.uris.search
ב-Update API, נעשה שימוש במטמון כדי לצמצם את מספר הבקשות שמועברות מלקוחות אל Google.hashes.search בהמשך מפורט פרוטוקול ה-caching לכל API.
Lookup API
לקוחות של Lookup API צריכים לשמור במטמון כל פריט ThreatUrl שמוחזר עד הזמן שמוגדר בשדה expireTime. לאחר מכן, הלקוחות צריכים לעיין במטמון לפני שהם שולחים בקשת uris.search נוספת לשרת. אם תוקף הרשומה במטמון של ThreatUrl שהוחזר בעבר עדיין לא פג, הלקוח צריך להניח שהפריט עדיין לא בטוח. שמירת ThreatUrlפריטים במטמון
עשויה להפחית את מספר בקשות ה-API שהלקוח שולח.
Update API
כדי לצמצם את המספר הכולל של בקשות hashes.search שנשלחות אל Google באמצעות Update API, הלקוחות נדרשים לשמור מטמון מקומי. ה-API יוצר שני סוגים של שמירת נתונים במטמון: חיובי ושלילי.
שמירה חיובית במטמון
כדי למנוע מלקוחות לשאול שוב ושוב על הסטטוס של גיבוב מלא לא בטוח מסוים, כל ThreatHash שמוחזר מכיל זמן מטמון חיובי (מוגדר בשדה expireTime). עד אז, הגיבוב המלא יכול להיחשב כלא בטוח.
negative caching
כדי למנוע ממחשבי לקוח לשאול שוב ושוב על המצב של גיבוב מלא בטוח מסוים, התשובה מגדירה משך זמן שלילי של מטמון לקידומת המבוקשת (מוגדר בשדה negativeExpireTime). עד למועד הזה, כל הגיבובים המלאים עם הקידומת המבוקשת נחשבים בטוחים לסוגי האיומים המבוקשים, למעט אלה שהשרת מחזיר כלא בטוחים.
השמירה במטמון חשובה במיוחד כי היא מונעת עומס תנועה שיכול להיגרם מהתנגשות של קידומת גיבוב עם כתובת URL בטוחה שמקבלת הרבה תנועה.
התייעצות עם המטמון
כשהלקוח רוצה לבדוק את הסטטוס של כתובת URL, הוא קודם מחשב את הגיבוב המלא שלה. אם הקידומת של הגיבוב המלא נמצאת במסד הנתונים המקומי, הלקוח צריך לעיין במטמון שלו לפני שהוא שולח בקשת hashes.search לשרת.
קודם כל, הלקוחות צריכים לבדוק אם יש פגיעה חיובית במטמון. אם יש רשומה חיובית במטמון שלא פג תוקפה עבור הגיבוב המלא שמעניין אתכם, צריך להתייחס אליה כאל רשומה לא בטוחה. אם תוקף הרשומה החיובית במטמון פג, הלקוח צריך לשלוח בקשת hashes.search לקידומת המקומית המשויכת. לפי הפרוטוקול, אם השרת מחזיר את הגיבוב המלא, הוא נחשב לא בטוח. אחרת, הוא נחשב בטוח.
אם אין רשומות חיוביות במטמון עבור הגיבוב המלא, הלקוח צריך לבדוק אם יש פגיעה שלילית במטמון. אם יש רשומה לא פגומה של מטמון שלילי לקידומת המקומית המשויכת, הגיבוב המלא נחשב בטוח. אם תוקף הרשומה השלילית במטמון פג או שהיא לא קיימת, הלקוח צריך לשלוח בקשת hashes.search לקידומת המקומית המשויכת ולפרש את התגובה כרגיל.
עדכון המטמון
צריך לעדכן את מטמון הלקוח בכל פעם שמתקבלת תגובה hashes.search.
צריך ליצור או לעדכן רשומה חיובית במטמון עבור הגיבוב המלא לפי השדה expireTime. צריך גם ליצור או לעדכן את משך הזמן של המטמון השלילי של קידומת הגיבוב בהתאם לשדה negativeExpireTime בתגובה.
אם בקשת hashes.search הבאה לא מחזירה גיבוב מלא שנמצא כרגע במטמון חיובי, הלקוח לא נדרש להסיר את הרשומה החיובית במטמון. בפועל, אין סיבה לדאגה כי משכי הזמן של מטמון חיובי הם בדרך כלל קצרים (כמה דקות) כדי לאפשר תיקון מהיר של תוצאות חיוביות שגויות.
מקרה לדוגמה
בדוגמה הבאה, נניח ש-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/) צריך להיחשב לא בטוח בלי לשלוח בקשת hashes.search נוספת. אחרי 5 דקות, אם הלקוח יבקר שוב בכתובת example.com/, הוא יצטרך לשלוח בקשת hashes.search נוספת לקידומת הזו h(example.com/). הלקוח צריך לאפס את זמן התפוגה של המטמון השלילי של קידומת הגיבוב בהתאם לתגובה החדשה.
משך השהייה השלילי במטמון של שעה אחת מציין ללקוח כמה זמן כל הגיבובים האחרים באורך מלא, מלבד H(example.com/), שחולקים את אותה תחילית של h(example.com/), צריכים להיחשב בטוחים. במשך שעה אחת, כל כתובת URL שבה h(URL) = h(example.com/) חייבת להיחשב בטוחה, ולכן לא תגרום לבקשת hashes.search (בהנחה ש-H(URL) != H(example.com/).
אם התגובה fullHashes מכילה אפס התאמות ומוגדר זמן תפוגה שלילי של המטמון, הלקוח לא יכול לשלוח בקשות hashes.search לאף אחת מהקידומות המבוקשות למשך זמן המטמון השלילי שצוין.
אם התשובה hashes.search מכילה התאמה אחת או יותר, עדיין מוגדר זמן תפוגה שלילי למטמון עבור התשובה כולה. במקרה כזה, זמן התפוגה של מטמון של גיבוב מלא יחיד מציין כמה זמן הלקוח צריך להניח שהגיבוב המלא הספציפי לא בטוח. אחרי שמשך הזמן של המטמון ThreatHash מסתיים, הלקוח צריך לרענן את הגיבוב באורך מלא על ידי שליחת בקשת hashes.search לקידומת הגיבוב הזו, אם כתובת ה-URL המבוקשת תואמת לגיבוב הקיים באורך מלא במטמון. במקרה כזה, משך הזמן של המטמון השלילי לא חל. משך השהייה השלילי במטמון של התגובה חל רק על גיבובים באורך מלא שלא היו בתגובה hashes.search. אם הגיבובים באורך מלא לא מופיעים בתגובה, הלקוח צריך להימנע משליחת בקשות hashes.search עד שתוקף המטמון השלילי יפוג.