שיפור משמעותי אחד בגרסה 5 של Google Safe Browsing בהשוואה לגרסה 4 (במיוחד Update API בגרסה 4) הוא עדכניות הנתונים והיקף הכיסוי. מאחר שההגנה תלויה במידה רבה במסד הנתונים המקומי שמנוהל על ידי הלקוח, העיכוב והגודל של עדכון מסד הנתונים המקומי הם הגורמים העיקריים להחמצת ההגנה. בגרסה 4, ללקוח טיפוסי נדרשות 20 עד 50 דקות כדי לקבל את הגרסה העדכנית ביותר של רשימות האיומים. לצערנו, התקפות פישינג מתפשטות במהירות: נכון לשנת 2021, 60% מהאתרים שמשמשים להתקפות פועלים במשך פחות מ-10 דקות. לפי הניתוח שלנו, כ-25%-30% מהמקרים שבהם לא מופעלת הגנה מפני פישינג נובעים מנתונים לא עדכניים. בנוסף, חלק מהמכשירים לא מצוידים בניהול של כל רשימות האיומים של הגלישה הבטוחה ב-Google, שממשיכות לגדול עם הזמן.
אם אתם משתמשים כרגע ב-Update API v4, יש לכם נתיב העברה חלק מגרסה 4 לגרסה 5 בלי שתצטרכו לאפס או למחוק את מסד הנתונים המקומי. בקטע הזה נסביר איך עושים את זה.
המרת עדכונים ברשימה
בניגוד לגרסה 4, שבה הרשימות מזוהות לפי הטופל של סוג האיום, סוג הפלטפורמה וסוג הרשומה של האיום, בגרסה 5 הרשימות מזוהות פשוט לפי שם. כך אפשר להשתמש באותה רשימת איומים בכמה רשימות בגרסה 5. סוגי הפלטפורמות וסוגים של כניסות של איומים הוסרו בגרסה 5.
בגרסה 4, משתמשים בmethod threatListUpdates.fetch כדי להוריד רשימות. בגרסה 5, צריך לעבור לשיטה hashLists.batchGet.
צריך לבצע את השינויים הבאים בבקשה:
- מסירים את האובייקט
ClientInfo
בגרסה 4 לגמרי. במקום לספק את הזיהוי של הלקוח באמצעות שדה ייעודי, פשוט משתמשים בכותרת User-Agent המוכרת. אין פורמט מוגדר לשליחת מזהה הלקוח בכותרת הזו, אבל מומלץ פשוט לכלול את מזהה הלקוח המקורי ואת גרסת הלקוח המקורית, מופרדים על ידי תו רווח או תו קו נטוי. - לכל אובייקט
ListUpdateRequest
בגרסה 4: * מחפשים את שם הרשימה התואם בגרסה 5 בטבלה שלמעלה ומספקים את השם הזה בבקשה בגרסה 5.- מסירים שדות מיותרים כמו
threat_entry_type
אוplatform_type
. - השדה
state
בגרסה 4 תואם ישירות לשדהversions
בגרסה 5. אפשר פשוט לשלוח ב-v5 את אותה מחרוזת בייטים שנשלחת לשרת באמצעות השדהstate
ב-v4, באמצעות השדהversions
. - באילוצים של גרסה 4, בגרסה 5 נעשה שימוש בגרסה פשוטה יותר שנקראת
SizeConstraints
. צריך להסיר שדות נוספים כמוregion
.
- מסירים שדות מיותרים כמו
צריך לבצע את השינויים הבאים בתשובה:
- המאפיין המוגדר מראש
ResponseType
בגרסה 4 מוחלף פשוט בשדה בוליאני בשםpartial_update
. - עכשיו אפשר להזין בשדה
minimum_wait_duration
את הערך אפס או להשמיט אותו. אם כן, הלקוח מתבקש לשלוח בקשה נוספת באופן מיידי. המצב הזה מתרחש רק כאשר הלקוח מציין ב-SizeConstraints
אילוץ קטן יותר על גודל העדכון המקסימלי מגודל מסד הנתונים המקסימלי. - צריך לשנות את אלגוריתם הפענוח של Rice למספרים שלמים של 32 ביט. ההבדל הוא שהנתונים המקודדים מקודדים עם endianness שונה. גם בגרסה 4 וגם בגרסה 5, קידומות גיבוב של 32 ביט ממוינות לפי סדר אלפביתי. עם זאת, בגרסה 4, הקידומות האלה ממוינות לפי little endian, ואילו בגרסה 5 הן ממוינות לפי big endian. כלומר, הלקוח לא צריך לבצע מיון, כי מיון לקסיקלי זהה למיון מספרי עם big endian. דוגמה לכך בהטמעה של Chromium בגרסה 4 מופיעה כאן. אפשר להסיר את המיון הזה.
- יהיה צורך להטמיע את אלגוריתם הפענוח של Rice גם באורך גיבוב אחר.
המרת שאילתות גיבוב (Hash)
בגרסה 4, משתמשים בשיטה fullHashes.find כדי לקבל גרסאות גלובליות של גיבוב. השיטה המקבילה בגרסה 5 היא השיטה hashes.search.
צריך לבצע את השינויים הבאים בבקשה:
- צריך לבנות את הקוד כך שיישלח רק תחילית גיבוב באורך של 4 בייטים בדיוק.
- מסירים את האובייקטים מסוג
ClientInfo
בגרסה 4 לגמרי. במקום לספק את הזיהוי של הלקוח באמצעות שדה ייעודי, פשוט משתמשים בכותרת User-Agent המוכרת. אין פורמט מוגדר למתן פרטי הזיהוי של הלקוח בכותרת הזו, אבל מומלץ פשוט לכלול את מזהה הלקוח המקורי ואת גרסת הלקוח, מופרדים על ידי תו רווח או תו קו נטוי. - מסירים את השדה
client_states
. אין צורך יותר. - אין יותר צורך לכלול את השדה
threat_types
ושדות דומים.
צריך לבצע את השינויים הבאים בתשובה:
- השדה
minimum_wait_duration
הוסר. הלקוח תמיד יכול לשלוח בקשה חדשה לפי הצורך. - האובייקט
ThreatMatch
בגרסה 4 פשוט יותר והוא נקרא עכשיוFullHash
. - שמירת הנתונים במטמון פשוטה יותר עכשיו, והיא כוללת משך זמן אחסון אחד במטמון. אפשר להיעזר בהליכים שלמעלה כדי לבצע פעולות במטמון.