הפיכת :visited לפרטי יותר

Kyra Seevers
Kyra Seevers

תאריך פרסום: 2 באפריל 2025

מה קורה כשלוחצים על קישור? הוא הופך לסגול!

מאז ימי האינטרנט הראשונים, אתרים מסתמכים על בורר ה-CSS :visited כדי להחיל סגנונות מותאמים אישית על קישורים שמשתמשים לחצו עליהם בעבר. בעזרת הבורר :visited, בעלי אתרים יכולים לשפר את חוויית המשתמש שלהם ולעזור למשתמשים לנווט באינטרנט. עם זאת, ככל שהאפשרויות להתאמה אישית של קישורים שנכנסתם אליהם גדלו עם הזמן, כך גם מספר ההתקפות שהחוקרים גילו גדל.

ההתקפות האלה יכולות לחשוף את הקישורים שבהם המשתמש ביקר ולדלוף פרטים על פעילות הגלישה שלו באינטרנט. בעיית האבטחה הזו מטרידה את האינטרנט כבר יותר מ-20 שנה, ודפדפנים פרסו אמצעי הגנה זמניים שונים כדי לצמצם את ההתקפות האלה לזיהוי היסטוריה. אמצעי המיטיגציה האלה מאטים את המתקפות, אבל לא מונעים אותן.

החל מגרסה 136 של Chrome, Chrome הוא הדפדפן הראשי הראשון שמבטל את ההתקפות האלה. כדי לעשות זאת, מחלקים את היסטוריית הקישורים של :visited.

כדי להציג את הקישורים שבהם ביקרתם בעבר, הדפדפן צריך לעקוב אחרי הדפים שבהם ביקרתם לאורך זמן. הנתונים האלה נקראים היסטוריית :visited. אפשר להגדיר סגנון שונה לקישורים שנכנסתם אליהם בהשוואה לקישורים שלא נכנסתם אליהם באמצעות הבורר :visited ב-CSS:

:visited {
  color: purple;
  background-color: yellow;
  }

בעבר, ההיסטוריה של :visited לא פוצלה למחיצות. כלומר, לא היו הגבלות על המקומות שבהם אפשר היה להציג את היסטוריית :visited באמצעות הבורר :visited. אם תלחצו על קישור, הוא יופיע בתור ‎ :visited בכל אתר שבו הקישור הזה מוצג. זו הייתה נקודת החולשה העיקרית בתכנון, שאפשרה לתוקפים לחשוף מידע על היסטוריית הגלישה של המשתמש.

הנה דוגמה. אתם גולשים באתר א' ולוחצים על קישור כדי לעבור לאתר ב'. בתרחיש הזה, אתר ב' יתווסף להיסטוריה של :visited. בהמשך, יכול להיות שתבקרו באתר Evil, שיוצר קישור לאתר ב' גם כן. בלי חלוקה למחיצות, הקישור הזה לאתר ב'אתר הרע' יוצג בתור :visited – גם אם לא לחצתם על הקישור ב'אתר הרע'. לאחר מכן, האתר הזדוני יכול להשתמש בניצול אבטחה כדי לבדוק אם הקישור מעוצב כ-:visited, וכך לדעת שביקרתם באתר ב' בעבר – וכך לדלוף מידע על היסטוריית הגלישה שלכם.

לפני יצירת המחיצות, כשלוחצים על קישור:

המשתמש נמצא בדף site-a.com שבו מוצג קישור אל site-b.com.

הוא יוצג כ-:visited בכל אתר שבו מוצג הקישור הזה.

מוצג אותו site-a.com לצד site-evil.com. בשני הדפים מוצג אותו קישור אל site-b.com, והוא מעוצב כקישור שביקרתם בו.

חלוקה למחיצות מגינה על היסטוריית הגלישה שלכם. המערכת מציגה קישור כ'ביקרתם בו' רק אם לחצתם עליו בעבר מהאתר הזה. אם לא הייתה לכם אינטראקציה עם האתר הזה בעבר, הקישורים שלו לא יוצגו בסגנון :visited.

נבחן את הדוגמה הקודמת, אבל עם חלוקה למחיצות מופעלת. אתם גולשים באתר א' ולוחצים על קישור כדי לעבור לאתר ב'. השילוב 'אתר א' + 'אתר ב' נשמר בהיסטוריית הביקורים. כך, כשנכנסים לאתר הרע, הקישור שלו לאתר ב' לא יוצג כ-:visited כי הוא לא תואם לשני החלקים של הרשומה 'אתר א' + 'אתר ב' (ההקשר שבו לחצתם במקור על הקישור). מכיוון שאין היסטוריית גלישה באתר Site Evil, לא ניתן לנצל בו נקודות חולשה. לכן, היסטוריית הדפדפן שלכם בטוחה.

אחרי יצירת המחיצות, כשלוחצים על קישור:

המשתמש נמצא בדף site-a.com שבו מוצג קישור אל site-b.com.

הוא מוצג כ-:visited רק במקומות שבהם לחצתם עליו בעבר.

מוצג אותו site-a.com לצד site-evil.com. בשני הדפים מוצג אותו קישור אל site-b.com, ורק הקישור ב-site-a.com מעוצב כקישור שנצפה.

בקצרה, חלוקה למחיצות היא שמירה של הקישורים עם מידע נוסף על המיקום שבו בוצע עליהם קליק. ב-Chrome, אלה: כתובת ה-URL של הקישור, האתר ברמה העליונה ומקור המסגרת. כשהמחיצה מופעלת, היסטוריית :visited כבר לא רשימה גלובלית שכל אתר יכול לשלוח אליה שאילתות. במקום זאת, ההיסטוריה של :visited "מופרדת" או מופרדת לפי ההקשר שבו נכנסתם לקישור מלכתחילה.

מוצג תהליך העברת המידע דרך כתובת ה-URL של הקישור, האתר ברמה העליונה ומקור הפריים.

כשאתם גולשים באינטרנט, יכול להיות שתלחצו על הרבה קישורים, שכוללים הפניות לדפי משנה שונים באותו אתר. לדוגמה, כשמחפשים מידע על סוגים שונים של מתכות, אפשר להיכנס לדפים Site.Wiki של 'כרום' ו'פליז'.

בהטמעה נוקשה של חלוקה למחיצות, למשתמשים בדף Site.Wiki של הזהב לא יוצגו הקישורים לדפים של הפליז והכרום כ-:visited. הסיבה לכך היא שהמשתמש לחץ על כל אחד מהדפים האלה מאתר ברמה העליונה שלא תואם לדף Site.Wiki לסטטוס זהב.

למרות שהמשתמש ביקר בקבוצת קישורים ב-site.wiki מ-metals.com, הם לא מוצגים בסגנון 'ביקר' כי הקליק היה מ-metals.com.

כדי לשפר את חוויית המשתמש בתרחיש הזה ועדיין לספק את ההגנות על הפרטיות והאבטחה של חלוקה למחיצות, הוספנו החרגה לקישורים עצמיים. בקצרה, אתר יכול להציג את דפי המשנה שלו בתור :visited, גם אם לא לחצו על הקישורים האלה בהקשר הזה בעבר. לאתרים יש שיטות אחרות למעקב אחרי כך שמשתמש ביקר בדפי המשנה שלהם, ולכן לא יינתן מידע חדש לאתרים האלה עם ההוספה של קישורים עצמיים. חלוקה למחיצות עדיין מגינה מפני מעקב חוצה-אתרים ומאכפת את מדיניות המקור הזהה. עם זאת, חשוב לציין שהכלל הזה חל רק על קישורים לדפי משנה של האתר עצמו. קישורים לאתרים של צד שלישי או ב-iframe של צד שלישי לא עומדים בדרישות של ההחרגה הזו.

אחרי ההחרגה של 'קישורים עצמיים':

קישורים עצמיים מסומנים עכשיו כקישורים שנצפו אם הם דפי משנה של אותו אתר.

סטטוס ההטמעה

השיפורים האלה באבטחה ובפרטיות של :visited זמינים החל מגרסה 136 של Chrome. Chrome הוא הדפדפן הראשון שבו הוחלו ההגנות האלה למען המשתמשים.

שיתוף משוב ויצירת אינטראקציה