Migration From V4

שיפור משמעותי אחד בגרסה 5 של הגלישה הבטוחה של Google לעומת גרסה 4 (במיוחד ה-API של עדכון גרסה 4) הוא עדכניות הנתונים והכיסוי שלהם. מכיוון שההגנה תלויה מאוד במסד הנתונים המקומי שמתוחזק על ידי הלקוח, העיכוב והגודל של עדכון מסד הנתונים המקומי הם הגורמים העיקריים לכך שההגנה לא פעלה. בגרסה 4, בדרך כלל לוקח ללקוח 20 עד 50 דקות לקבל את הגרסה העדכנית ביותר של רשימות האיומים. לצערנו, התקפות פישינג מתפשטות במהירות: נכון לשנת 2021, 60% מהאתרים שמבצעים התקפות פעילים פחות מ-10 דקות. הניתוח שלנו מראה שכ-25% עד 30% מההגנה החסרה מפני פישינג נובעת מנתונים לא עדכניים כאלה. בנוסף, חלק מהמכשירים לא מצוידים לנהל את כל רשימות האיומים של הגלישה הבטוחה של Google, שממשיכות לגדול עם הזמן.

אם אתם משתמשים כרגע ב-v4 Update API, יש דרך חלקה לעבור מגרסה 4 לגרסה 5 בלי לאפס או למחוק את מסד הנתונים המקומי. בקטע הזה מוסבר איך עושים את זה.

המרת עדכוני רשימה

בגרסה 4, הרשימות מזוהות על ידי הטופל של סוג האיום, סוג הפלטפורמה וסוג רשומת האיום. בגרסה 5, הרשימות מזוהות פשוט לפי שם. הגמישות הזו שימושית במקרים שבהם כמה רשימות בגרסה 5 חולקות את אותו סוג איום. סוגי הפלטפורמות וסוגי רשומות האיומים הוסרו בגרסה 5.

בגרסה 4, משתמשים ב-threatListUpdates.fetch method כדי להוריד רשימות. בגרסה 5, צריך לעבור אל השיטה hashLists.batchGet.

צריך לבצע את השינויים הבאים בבקשה:

  1. מסירים את האובייקט ClientInfo v4 לגמרי. במקום לספק את זיהוי הלקוח באמצעות שדה ייעודי, פשוט משתמשים בכותרת User-Agent המוכרת. אין פורמט מוגדר לאספקת זיהוי הלקוח בכותרת הזו, אבל אנחנו מציעים לכלול רק את מזהה הלקוח המקורי ואת גרסת הלקוח, כשהם מופרדים באמצעות רווח או לוכסן.
  2. לכל אובייקט ListUpdateRequest בגרסה 4:
    • מחפשים את שם הרשימה התואם בגרסה 5 מתוך הרשימות הזמינות ומזינים את השם הזה בבקשה בגרסה 5.
    • מסירים שדות מיותרים כמו threat_entry_type או platform_type.
    • השדה state בגרסה 4 תואם ישירות לשדה versions בגרסה 5. אפשר לשלוח בגרסה 5 את אותה מחרוזת בייטים שנשלחה לשרת באמצעות השדה state בגרסה 4, פשוט באמצעות השדה versions.
    • בגרסה 5, האילוצים של גרסה 4 מופיעים בגרסה פשוטה יותר שנקראת SizeConstraints. צריך להסיר שדות נוספים כמו region.

צריך לבצע את השינויים הבאים בתשובה:

  1. ה-enum ResponseType בגרסה 4 פשוט מוחלף בשדה בוליאני בשם partial_update.
  2. השדה minimum_wait_duration יכול להיות עכשיו אפס או מושמט. אם כן, הלקוח מתבקש לשלוח בקשה נוספת באופן מיידי. המצב הזה קורה רק כשהלקוח מציין ב-SizeConstraints מגבלה קטנה יותר על גודל העדכון המקסימלי מאשר גודל מסד הנתונים המקסימלי.
  3. צריך להתאים את אלגוריתם הפענוח של Rice למספרים שלמים בני 32 ביט. ההבדל הוא שהנתונים המקודדים מקודדים עם סדר בתים שונה. גם בגרסה 4 וגם בגרסה 5, קידומות הגיבוב (hash) של 32 ביט ממוינות בסדר לקסיקוגרפי. אבל בגרסה 4, הקידומות האלה נחשבות כ-little endian כשממיינים אותן, ואילו בגרסה 5 הן נחשבות כ-big endian כשממיינים אותן. המשמעות היא שהלקוח לא צריך לבצע מיון, כי מיון לקסיקוגרפי זהה למיון מספרי עם big endian. דוגמה לסוג כזה בהטמעה של v4 ב-Chromium מופיעה כאן. אפשר להסיר את המיון הזה.
  4. יהיה צורך להטמיע את אלגוריתם הפענוח של Rice גם עבור אורכי גיבוב אחרים.

המרת חיפושי גיבוב (Hash)

בגרסה 4, משתמשים בשיטה fullHashes.find כדי לקבל גיבובים מלאים. השיטה המקבילה בגרסה 5 היא השיטה hashes.search.

צריך לבצע את השינויים הבאים בבקשה:

  1. צריך לבנות את הקוד כך שישלח רק קידומות של גיבוב באורך של 4 בייטים בדיוק.
  2. להסיר את האובייקטים של גרסה 4 ClientInfo לגמרי. במקום לספק את זיהוי הלקוח באמצעות שדה ייעודי, פשוט משתמשים בכותרת User-Agent המוכרת. אין פורמט מוגדר לאספקת זיהוי הלקוח בכותרת הזו, אבל אנחנו מציעים לכלול רק את מזהה הלקוח המקורי ואת גרסת הלקוח, כשהם מופרדים באמצעות רווח או לוכסן.
  3. מסירים את השדה client_states. היא כבר לא נחוצה.
  4. אין יותר צורך לכלול את threat_types ושדות דומים.

צריך לבצע את השינויים הבאים בתשובה:

  1. השדה minimum_wait_duration הוסר. הלקוח תמיד יכול להגיש בקשה חדשה לפי הצורך.
  2. האובייקט v4 ThreatMatch פושט לאובייקט FullHash.
  3. הפכנו את השמירה במטמון לפשוטה יותר, כך שמשך השמירה במטמון הוא אחיד. ההליכים לאינטראקציה עם הזיכרון השמור מפורטים למעלה.