המסמך הזה רלוונטי לשיטות הבאות:
מידע על שמירה במטמון
כדי לצמצם את השימוש ברוחב הפס של הלקוח ולהגן על Google מפני עליות חדות בתעבורת הנתונים, הלקוחות של
כדי ליצור ולתחזק מטמון מקומי של נתוני איומים, צריך להשתמש ב-Lookup API וב-Update API.
ל-Lookup API, המטמון משמש להפחתת מספר הthreatMatches
שלקוחות שולחים ל-Google. עבור ה-Update API, המטמון משמש להפחתת מספר
fullHashes
מבקש שהלקוחות ישלחו ל-Google. פרוטוקול השמירה במטמון של כל API הוא
בהמשך.
ממשק API לחיפוש
לקוחות של Lookup API צריכים לשמור במטמון כל פריט ThreatMatch
שהוחזר למשך הזמן שהוגדר
בשדה cacheDuration. לאחר מכן הלקוחות צריכים לבדוק את המטמון לפני שהם מבצעים
בקשת threatMatches
לשרת. אם משך הזמן של המטמון עבור קובץ מוחזר קודם ThreatMatch
עדיין לא פג התוקף, הלקוח צריך להניח שהפריט עדיין לא בטוח. ThreatMatch
פריטים נשמרים במטמון
עשוי להפחית את מספר בקשות ה-API שהלקוח שולח.
דוגמה: InvalidMatches.find
כדי לקבל את הדוגמאות המלאות, לוחצים על הקישורים לבקשה ולתשובה בכותרת הטבלה.
בדיקת כתובת URL בקשת threatMatches |
כתובת ה-URL תואמת ל- תגובת threatMatches |
התנהגות השמירה במטמון |
---|---|---|
"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
). משך הזמן הזה מציין למשך כמה זמן כל הגיבובים המלאים עם
ייחשבו כבטוחות עבור הרשימות המבוקשות, למעט אלה שהוחזרו על ידי השרת כ-
לא בטוחות. השמירה במטמון חשובה במיוחד כי היא מונעת עומס יתר של תנועה.
על ידי התנגשות עם קידומת גיבוב (hash) עם כתובת URL בטוחה שמקבלת תנועה רבה.
עיון במטמון
כשהלקוח רוצה לבדוק את המצב של כתובת URL, הוא מחשב קודם את הגיבוב המלא שלה. אם שיעור הדגימה מלא
תחילית הגיבוב מופיעה במסד הנתונים המקומי, והלקוח צריך לבדוק את המטמון שלו לפני
שליחת בקשת fullHashes
לשרת.
קודם כל, הלקוחות צריכים לבדוק אם יש היט חיובי במטמון. אם קיים מטמון חיובי שתוקפו פג
עבור כל הגיבוב (hash) של תחום העניין, הוא אמור להיחשב כלא בטוח. אם הרשומה החיובית במטמון
פג, הלקוח צריך לשלוח בקשת fullHashes
לקידומת המקומית המשויכת. בהתאם
פרוטוקול, אם השרת מחזיר את הגיבוב המלא, הוא נחשב ללא בטוח. אחרת הוא נחשב
בטוחה.
אם אין רשומות חיוביות במטמון של הגיבוב המלא, הלקוח צריך לבדוק אם יש ערך שלילי
פגיעות במטמון. אם קיימת רשומת מטמון שלילית בתוקף עבור התחילית המקומית המשויכת,
גיבוב מלא נחשב בטוח. אם פג התוקף של רשומת המטמון השלילית או שהיא לא קיימת, הלקוח
חייבים לשלוח בקשת fullHashes
לקידומת המקומית המשויכת ולפרש את התשובה כרגיל.
עדכון המטמון
יש לעדכן את מטמון הלקוח בכל פעם שמתקבלת תגובת fullHashes
. מטמון חיובי
יש ליצור או לעדכן רשומה עבור הגיבוב המלא לפי השדה cacheDuration
. הערכים של תחילית הגיבוב
צריך ליצור או לעדכן גם את משך הזמן של המטמון להחרגה לפי negativeCacheDuration
של התשובה
השדה הזה.
אם בקשת fullHashes
שמופיעה לאחר מכן לא מחזירה גיבוב מלא שנכון לעכשיו הוא חיובי
שנשמר במטמון, הלקוח לא נדרש להסיר את רשומת המטמון החיובית. זו לא סיבה לדאגה
בפועל, בגלל שמשכי הזמן של המטמון החיובי הם בדרך כלל קצרים (כמה דקות), כדי לאפשר
תיקון של תוצאות חיוביות מוטעות.
תרחיש לדוגמה
בדוגמה הבאה, נניח ש-h(url) היא קידומת הגיבוב של כתובת ה-URL ו-H(url) היא התחילית גיבוב (hash) באורך מלא של כתובת ה-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
עבור
את הקידומת של גיבוב (hash) אם כתובת ה-URL המבוקשת תואמת לגיבוב הקיים באורך מלא במטמון. בתהליך הזה
במקרה שמשך הזמן של המטמון השלילי לא חל. משך המטמון השלילי של התשובה חל רק
לגיבובים באורך מלא שלא היו קיימים בתשובה fullHashes
. בשביל גיבובים באורך מלא
לא קיימים בתשובה, הלקוח חייב להימנע משליחת בקשות fullHashes
כלשהן.
עד שיסתיים משך הזמן של המטמון השלילי.
דוגמה: fullHashes.find
כדי לקבל את הדוגמאות המלאות, לוחצים על הקישורים לבקשה ולתשובה בכותרת הטבלה.
קידומות גיבוב (hash) בקשת גיבובים מלאה |
התאמות גיבוב באורך מלא תגובת גיבובים מלאה |
התנהגות השמירה במטמון |
---|---|---|
"threatEntries": [ {"hash": "0xaaaaaaaa"} ] |
"matches": [], "negativeCacheDuration": "3600.000s" |
אין התאמה. אסור ללקוח לשלוח בקשות fullHashes לקידומת גיבוב (hash) 0xaaaaaa במשך שעה אחת לפחות.
כל גיבוב עם הקידומת 0xaaaaaa נחשב בטוח למשך שעה. |
"threatEntries": [ {"hash": "0xbbbbbbbb"} ] |
"matches": [ "threat": {"hash": "0xbbbbbbbb0000..."} "cacheDuration": "600.000s", ], "negativeCacheDuration": "300.000s" |
התאמות אפשריות. הלקוח צריך להתייחס לכתובת ה-URL עם הגיבוב המלא 0xbbbbbb0000... לא בטוחה למשך 10 דקות. הלקוח צריך להתייחס לכל שאר כתובות ה-URL עם קידומת הגיבוב 0xbbbbbbb בטוחות לשימוש למשך 5 דקות. אחרי 5 דקות, הקידומות של הגיבוב (hash) יפוגו. מאז הרשומה החיובית של המטמון עבור 0xbbbbb0000... עדיין לא פג התוקף, הלקוח צריך לשלוח בקשות fullHashes עבור כל הגיבובים
מלבד זאת. |
"threatEntries": [ {"hash": "0xcccccccc"} ] |
"matches": [ "threat": {"hash": "0xccccccccdddd..."}, "cacheDuration": "600.000s" ], "negativeCacheDuration": "3600.000s" |
התאמות אפשריות. ללקוח אסור לשלוח בקשת fullHashes לקידומת גיבוב (hash) 0xcccccccc למשך שעה לפחות, בהנחה
זו קידומת בטוחה — אלא אם הגיבוב המלא של כתובת ה-URL תואם לגיבוב המלא שנשמר במטמון
0xccccccdddd... במקרה כזה, הלקוח צריך להתייחס לכתובת ה-URL הזו כלא בטוחה למשך 10 דקות.
אחרי 10 דקות פג התוקף של הגיבוב באורך המלא. כל החיפושים הבאים של הגיבוב המלא אמורים
הפעלה של בקשת fullHashes חדשה. |