גיבוב של כתובות URL

סקירה כללית

רשימות הסיכון באינטרנט מורכבות מגיבובי SHA256 באורך משתנה. פרטים נוספים זמינים במאמר בנושא תוכן הרשימה. כדי לבדוק כתובת URL מול רשימה של Web Risk, באופן מקומי או בשרת, הלקוחות צריכים קודם לחשב את קידומת הגיבוב של כתובת ה-URL הזו.

כדי לחשב את קידומת הגיבוב של כתובת URL, פועלים לפי השלבים הבאים:

  1. קובעים את כתובת ה-URL כגרסה הרשמית (הקנונית) כמו שמתואר במאמר בנושא קביעת כתובת URL כגרסה הרשמית (הקנונית).
  2. יוצרים את ביטויי הסיומת/התחילית של כתובת ה-URL כמו שמתואר בקטע ביטויי סיומת/תחילית.
  3. מחשבים את הגיבוב באורך מלא לכל ביטוי של סיומת או קידומת, כמו שמתואר בקטע חישובי גיבוב.
  4. מחשבים את קידומת הגיבוב לכל גיבוב באורך מלא, כמו שמתואר בקטע חישובים של קידומת הגיבוב.

שימו לב שהשלבים האלה משקפים את התהליך שבו שרת Web Risk משתמש כדי לתחזק את רשימות Web Risk.

קביעת כתובת ה-URL כגרסה הרשמית (הקנונית

כדי להתחיל, אנחנו מניחים שהלקוח ניתח את כתובת ה-URL והפך אותה לתקינה בהתאם לתקן RFC 2396. אם כתובת ה-URL משתמשת בשם דומיין בינלאומי (IDN), הלקוח צריך להמיר את כתובת ה-URL לייצוג Punycode ב-ASCII. כתובת ה-URL צריכה לכלול רכיב נתיב, כלומר היא צריכה להתחיל בקו נטוי (http://google.com/).

קודם צריך להסיר את התווים של Tab ‏ (0x09), CR ‏ (0x0d) ו-LF ‏ (0x0a) מכתובת ה-URL. אל תסירו רצפי תווים לסימון בתו בריחה (escape) של התווים האלה, כמו %0a.

שנית, אם כתובת ה-URL מסתיימת בשבר של פריט, צריך להסיר את השבר. לדוגמה, לקצר את השם http://google.com/#frag ל-http://google.com/.

שלישית, מסירים שוב ושוב את תווי ה-escape של האחוזים מכתובת ה-URL עד שלא נשארים בה עוד תווי escape של אחוזים.

כדי להגדיר את שם המארח כקנוני

לחלץ את שם המארח מכתובת ה-URL ואז:

  1. מסירים את כל הנקודות בתחילת הטקסט ובסופו.
  2. החלפה של נקודות עוקבות בנקודה אחת.
  3. אם אפשר לנתח את שם המארח ככתובת IP, צריך לנרמל אותו ל-4 ערכים דצימליים שמופרדים בנקודות. הלקוח צריך לטפל בכל קידוד חוקי של כתובת IP, כולל קידוד אוקטלי, הקסדצימלי וקידוד עם פחות מארבעה רכיבים.
  4. האותיות הקטנות של כל המחרוזת.

כדי לקבוע את כתובת ה-URL של הנתיב כגרסה הרשמית (הקנונית)

  1. כדי לפתור את הרצפים /../ ו-/./ בנתיב, מחליפים את /./ ב-/ ומסירים את /../ יחד עם רכיב הנתיב הקודם.
  2. החלפת רצפים של לוכסנים עוקבים בתו לוכסן יחיד.

אל תחיל את הקנוניזציה של הנתיב על פרמטרים של שאילתות.

בכתובת ה-URL, צריך להשתמש בסימן האחוז כדי לבצע escape לכל התווים שהם <= ASCII 32,‏ >= 127,‏ # או %. התווים שמוחלפים צריכים להיות בפורמט הקסדצימלי באותיות רישיות.

בהמשך מפורטים מבחנים שיעזרו לכם לאמת את ההטמעה של קנוניזציה.

Canonicalize("http://host/%25%32%35") = "http://host/%25";
Canonicalize("http://host/%25%32%35%25%32%35") = "http://host/%25%25";
Canonicalize("http://host/%2525252525252525") = "http://host/%25";
Canonicalize("http://host/asdf%25%32%35asd") = "http://host/asdf%25asd";
Canonicalize("http://host/%%%25%32%35asd%%") = "http://host/%25%25%25asd%25%25";
Canonicalize("http://www.google.com/") = "http://www.google.com/";
Canonicalize("http://%31%36%38%2e%31%38%38%2e%39%39%2e%32%36/%2E%73%65%63%75%72%65/%77%77%77%2E%65%62%61%79%2E%63%6F%6D/") = "http://168.188.99.26/.secure/www.ebay.com/";
Canonicalize("http://195.127.0.11/uploads/%20%20%20%20/.verify/.eBaysecure=updateuserdataxplimnbqmn-xplmvalidateinfoswqpcmlx=hgplmcx/") = "http://195.127.0.11/uploads/%20%20%20%20/.verify/.eBaysecure=updateuserdataxplimnbqmn-xplmvalidateinfoswqpcmlx=hgplmcx/";
Canonicalize("http://host%23.com/%257Ea%2521b%2540c%2523d%2524e%25f%255E00%252611%252A22%252833%252944_55%252B") = "http://host%23.com/~a!b@c%23d$e%25f^00&11*22(33)44_55+";
Canonicalize("http://3279880203/blah") = "http://195.127.0.11/blah";
Canonicalize("http://www.google.com/blah/..") = "http://www.google.com/";
Canonicalize(