קובצי cookie עם מצב נפרד של מחיצות (CHIPS)

מפתחים יכולים לצרף קובץ cookie למצב "מחולק למחיצות" אחסון צנצנת קובצי cookie נפרדת לכל אתר ברמה העליונה.

סטטוס הטמעה

תמיכה בדפדפן

  • 114
  • 114
  • x
  • x

מקור

מה זה CHIPS?

קובצי Cookie עם חלוקה עצמאית למחיצות (CHIPS) מאפשרות למפתחים לצרף קובץ Cookie לאחסון מחולק למחיצות, עם צנצנות נפרדות של קובצי Cookie לכל אתר ברמה העליונה, כדי לשפר את הפרטיות והאבטחה של המשתמשים.

בלי חלוקה למחיצות (partitioning), קובצי Cookie של צד שלישי יכולים לאפשר לשירותים לעקוב אחרי משתמשים ולצרף את המידע שלהם מאתרים רבים ברמה עליונה שלא קשורים אחד לשני. מצב כזה נקרא 'מעקב באתרים שונים'.

הדפדפנים נמצאים כבר בתהליך הוצאה הדרגתי של קובצי cookie של צד שלישי שאינם מחולקים למחיצות, כך ש-CHIPS, Storage Access API וקבוצות של אתרים קשורים יהיו הדרך היחידה לקרוא ולכתוב קובצי cookie מהקשרים בין אתרים שונים, כמו iframes, כשקובצי cookie של צד שלישי חסומים.

תרשים שמראה איך ניתן לשתף מתכונים בין שני אתרי אינטרנט שונים.
ללא חלוקה למחיצות (partitioning) של קובצי Cookie, שירות צד שלישי יכול להגדיר קובץ Cookie כשהוא מוטמע באתר אחד ברמה העליונה ולגשת לאותו קובץ Cookie כשהשירות מוטמע באתרים אחרים ברמה העליונה.

CHIPS כולל מאפיין חדש של קובצי Cookie, Partitioned, כדי לתמוך בקובצי Cookie של אתרים שונים, המחולקים למחיצות לפי הקשר ברמה עליונה.

כותרת הגדרת קובץ Cookie:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

JavaScript:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

קובץ Cookie של צד שלישי המחולק למחיצות מקושר לאתר ברמה העליונה שבו הוא מוגדר לראשונה, ולא ניתן לגשת אליו ממקומות אחרים. בדרך זו, ניתן לקרוא קובצי Cookie שהוגדרו על ידי שירות צד שלישי רק באותו הקשר מוטמע של האתר ברמה העליונה שבו הם הוגדרו לראשונה.

תרשים שמראה ששני אתרי אינטרנט שונים שמטמיעים צד שלישי משותף לא ישתפו יותר קובצי Cookie של אותו צד שלישי.
באמצעות חלוקה למחיצות (partitioning) של קובצי Cookie, שירות צד שלישי שמגדיר קובץ Cookie כאשר הוא מוטמע באתר אחד ברמה העליונה לא יכול לגשת לאותו קובץ Cookie כשהשירות מוטמע באתרים אחרים ברמה עליונה.

כשמשתמשים בקובצי Cookie עם חלוקה למחיצות, כשמשתמש מבקר באתר א' ותוכן מוטמע מאתר ג' מגדיר קובץ Cookie עם המאפיין 'חלוקה למחיצות', קובץ ה-Cookie נשמר בצנצנת מחולקת למחיצות שמיועדות רק לקובצי Cookie שהאתר C מגדיר כשהוא מוטמע באתר א'. הדפדפן ישלח את קובץ ה-cookie רק כאשר האתר ברמה העליונה הוא A.

כשמשתמש מבקר באתר חדש, לדוגמה באתר ב', מסגרת C מוטמעת לא תקבל את קובץ ה-cookie שהוגדר כש-C הוטמע באתר א'.

אם משתמש מבקר באתר ג' כאתר ברמה העליונה, גם קובץ ה-cookie המחולק למחיצות ש-C הגדיר כשהוטמע בא' לא יישלח בבקשה הזו.

תרשים שמראה שלא מתבצע שיתוף של קובצי Cookie כשאותו צד שלישי מוטמע בשני אתרי אינטרנט שונים.
באמצעות חלוקה למחיצות (partitioning) של קובצי Cookie, שירות צד שלישי שמגדיר קובץ Cookie כאשר הוא מוטמע באתר לא יכול לגשת לאותו קובץ Cookie גם כשהמשתמשים מבקרים בשירות כאתר ברמה העליונה.

תרחישים לדוגמה

לדוגמה, ייתכן שהאתר retail.example ירצה לעבוד עם שירות צד שלישי support.chat.example כדי להטמיע תיבת צ'אט לתמיכה באתר שלו. רוב שירותי הצ'אט שניתנים להטמעה מסתמכים היום על קובצי Cookie כדי לשמור את המצב.

תרשים שמראה אתר עם ווידג'ט של צ'אט עם עיטורים
האתר ברמה העליונה Retail.example מוטמע של שירות צד שלישי support.chat.example.

בלי אפשרות להגדיר קובץ Cookie באתרים שונים, support.chat.example יצטרך למצוא שיטות חלופיות לאחסון מצבים, ובמקרים רבים יותר הם מורכבים יותר. לחלופין, יהיה צורך להטמיע אותו בדף ברמה העליונה, מה שעלול לגרום לסיכונים כי הוא מאפשר לסקריפט support.chat.example לקבל הרשאות מורחבות ב- Retail.example, כמו היכולת לגשת לקובצי cookie לאימות.

הכלי CHIPS מספק אפשרות קלה יותר להמשיך להשתמש בקובצי Cookie מאתרים שונים, ללא הסיכונים הקשורים לקובצי Cookie שאינם מחולקים למחיצות.

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

  • הטמעות צ'אט של צד שלישי
  • הטמעות מפה של צד שלישי
  • הטמעות תשלומים של צד שלישי
  • איזון עומסים של משאבי משנה ב-CDN
  • ספקים של מערכות ניהול תוכן ללא GUI
  • דומיינים של ארגז חול להצגת תוכן לא מהימן של משתמשים (כמו googleusercontent.com ו-githubusercontent.com)
  • רשתות CDN של צד שלישי שמשתמשים בקובצי cookie כדי להציג תוכן שהגישה אליו מבוקרת לפי סטטוס האימות באתר של הצד הראשון (למשל, תמונות פרופיל באתרי מדיה חברתית שמתארחים ברשתות CDN של צד שלישי)
  • frameworks חזיתיות שמסתמכות על ממשקי API מרחוק שמשתמשים בקובצי Cookie בבקשות שלהם
  • מודעות מוטמעות שצריכות להיות ברמת המדינה (State) של כל בעל תוכן דיגיטלי (לדוגמה, תיעוד העדפות המודעות של המשתמשים באותו אתר)

למה CHIPS משתמש במודל חלוקה למחיצות (partitioning) לפי הבעת הסכמה

מאחר שדפדפנים מוציאים משימוש בהדרגה ��ובצי Cookie ��ל ��ד שלישי ל��א חלוקה למחיצות, ניסינו להשתמש בכמה גישות אחרות לחלוקה למחיצות.

ב-Firefox הכריזו שהם מחלקים למחיצות את כל קובצי ה-Cookie של צד שלישי כברירת מחדל במצב ETP Strict ובמצב גלישה פרטית, כך שכל קובצי ה-Cookie מאתרים שונים מחולקים למחיצות לפי האתר ברמה העליונה. עם זאת, חלוקה למחיצות של קובצי cookie ללא הבעת הסכמה של צד שלישי עלולה להוביל לבאגים בלתי צפויים, כי חלק מהשירותים של צד שלישי בנו שרתים שמצפים לקובץ cookie של צד שלישי ללא מחיצות.

Safari ניסה בעבר לחלק קובצי cookie למחיצות על סמך היוריסטיקה, אבל בסופו של דבר בחר לחסום אותם לחלוטין. הסיבה לכך הייתה בלבול בקרב המפתחים. לאחרונה התעניינו ב-Safari במודל מבוסס-הסכמה.

ההבדל בין CHIPS לבין הטמעות קיימות של קובצי cookie עם חלוקה למחיצות הוא הבעת ההסכמה של צד שלישי. צריך להגדיר קובצי Cookie עם מאפיין חדש כדי לשלוח אותם בבקשות של צדדים שלישיים פעם אחת (ללא חלוקת נתונים) לקובצי Cookie של צד שלישי.

קובצי Cookie של צד שלישי עדיין קיימים, אבל המאפיין Partitioned מאפשר להביע הסכמה להתנהגות מגבילה ומאובטחת יותר של קובצי Cookie. CHIPS הוא שלב חשוב שעוזר לשירותים לעבור בצורה חלקה לעתיד ללא קובצי cookie של צד שלישי.

כיום, קובצי ה-cookie נשמרים בשם המארח או בדומיין של האתר שהגדיר אותם, כלומר, מפתח המארח שלהם.

לדוגמה, לקובצי cookie מ-https://support.chat.example, מפתח המארח הוא ("support.chat.example").

בקטע CHIPS, קובצי Cookie שמביעים הסכמה לחלוקה למחיצות יוטמעו פעמיים במפתח המארח ובמפתח החלוקה.

מפתח חלוקה של קובץ cookie הוא האתר (הסכמה והדומיין שניתן לרשום) של כתובת ה-URL ברמה העליונה שבה הדפדפן ביקר בתחילת הבקשה לנקודת הקצה שהגדירה את קובץ ה-cookie.

בדוגמה הקודמת, שבה https://support.chat.example מוטמע ב-https://retail.example, כתובת ה-URL ברמה העליונה היא https://retail.example.

מפתח החלוקה במקרה הזה הוא ("https", "retail.example").

באופן דומה, מפתח חלוקה של בקשה הוא האתר של כתובת ה-URL ברמה העליונה שאליה הדפדפן ביקר בתחילת בקשה. דפדפנים חייבים לשלוח קובץ cookie ��ם המאפיין Partitioned רק בבקשות עם מפתח חלוקה זהה לזה של קובץ ה-cookie הזה.

כך נראה מפתח קובץ ה-cookie בדוגמה הקודמת לפני ואחרי CHIPS.

אתר א' והאתר המוטמע ג' חולקים קובץ cookie שפוצל. כשהוא לא מוטמע, אתר ג' לא יכול לגשת לקובץ ה-cookie שפוצל.
אתר א' והאתר המוטמע ג' חולקים קובץ cookie שפוצל. כשהוא לא מוטמע, אתר ג' לא יכול לגשת לקובץ ה-cookie שפוצל.

לפני CHIPS

key=("support.chat.example")

אחרי CHIPS

key={("support.chat.example"),("https", "retail.example")}

תכנון אבטחה

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

  • חובה להגדיר קובצי Cookie עם חלוקה למחיצות באמצעות Secure.
  • מומלץ להשתמש בקידומת __Host- כשמגדירים קובצי cookie עם חלוקה למחיצות, כדי לקשר אותם לשם המארח (ולא לדומיין שניתן לרשום).

דוגמה:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

חלופות ל-CHIPS

Storage Access API וקבוצות האתרים הקשורים (RWS) המשויכים הם מנגנונים של פלטפורמות אינטרנט שמאפשרים גישה מוגבלת לקובצי cookie באתרים שונים למטרות ספציפיות שגלויות למשתמשים.

אלה חלופות לחלוקה למחיצות של CHIPS, שבה נדרשת גישה לבישולים חוצי-אתרים ללא חלוקה למחיצות.

כדאי להשתמש בממשק Storage Access API ובקבוצות של אתרים קשורים במצבים שבהם אותו קובץ cookie צריך להיות זמין לשירות שמוטמע בכמה אתרים קשורים.

CHIPS מספק את היכולת של שירות לפעול כרכיב מבודד במספר אתרים, כאשר אותו קובץ cookie לא חייב להיות זמין בכמה אתרים. אם השירות מגדיר קובץ Cookie עם חלוקה למחיצות, מפתח החלוקה שלו יהיה האתר ברמה העליונה וקובץ ה-Cookie הזה לא יהיה זמין לאתרים אחרים שגם הם משתמשים בשירות.

העיצוב של קבוצות האתרים הקשורים מסתמך על Storage Access API ולא משתלב עם חלוקה למחיצות של CHIPS. אם יש לכם תרחיש לדוגמה שמסתמך על מחיצה משותפת של קובצי cookie בין אתרים ב-RWS, אתם יכולים לספק דוגמאות ומשוב לגבי הבעיה ב-GitHub.

הדגמה (דמו)

בהדגמה הזו מוסבר איך פועלים קובצי cookie עם חלוקה למחיצות ואיך אפשר ל��דוק אותם בכלי הפיתוח.

באתר א' מטמיע iframe מאתר ב' שמשתמש ב-JavaScript כדי להגדיר שני קובצי cookie: קובץ Cookie עם חלוקה למחיצות (partitioning) וקובץ Cookie ללא חלוקה למחיצות (partitioning). באתר ב' מוצגים כל קובצי ה-Cookie שאפשר לגשת אליהם מאותו מיקום באמצעות document.cookie.

לאחר חסימה של קובצי cookie של צד שלישי, לאתר ב' תהיה אפשרות להגדיר את קובץ ה-cookie ולגשת אליו עם המאפיין Partitioned רק בהקשר של כמה אתרים.

כשמאפשרים שימוש בקובצי Cookie של צד שלישי, גם אתר ב' יכול להגדיר את קובץ ה-cookie ללא חלוקת קובץ ולגשת אליו.

אתר א' ואתר ב'
שמאל: קובצי Cookie של צד שלישי חסומים. ימין: מותר להשתמש בקובצי Cookie של צד שלישי.

דרישות מוקדמות

  1. Chrome מגרסה 118 ואילך.
  2. יש להיכנס לכתובת chrome://flags/#test-third-party-cookie-phaseout ולהפעיל את ההגדרה הזו

שימוש בכלי פיתוח כדי לבדוק קובצי cookie שחולקו למחיצות

  1. נכנסים לכתובת https://chips-site-a.glitch.me.
  2. מקישים על Control+Shift+J (או על Command+Option+J ב-Mac) כדי לפתוח את כלי הפיתוח.
  3. לוחצים על הכרטיסייה Application.
  4. עוברים אל Application > אחסון > קובצי cookie.
  5. לוחצים על https://chips-site-b.glitch.me.

כלי הפיתוח יציגו את כל קובצי ה-Cookie מהמקור שנבחר.

קובצי Cookie מאתר ב' בכרטיסייה 'אפליקציה של כלי פיתוח'.

אתר ב' יכול להגדיר את קובץ ה-cookie עם חלוקה למחיצות רק בהקשר של אתרים שונים, קובץ ה-cookie ללא חלוקה למחיצות ייחסם:

  • אמור להופיע __Host-partitioned-cookie עם מפתח החלוקה של האתר ברמה העליונה https://chips-site-a.glitch.me.
מפתח חלוקה עבור __Host-partitioned-cookie.
  1. לוחצים על מעבר לאתר ב'.
  2. בכלי הפיתוח, עוברים אל Application > אחסון > קובצי cookie.
  3. לוחצים על https://chips-site-b.glitch.me.
אתר ב'
ברמה העליונה, אתר ב' יכול לראות את כל קובצי ה-Cookie – מחולקים למחיצות ולא מחולקים למחיצות

בתרחיש הזה, מאחר שאתם נמצאים באתר ב' בהקשר ברמה העליונה, הוא יכול להגדיר את שני קובצי ה-cookie ולגשת אליהם:

  • ב-unpartitioned-cookie יש מפתח חלוקה ריק.
  • לקובץ Cookie של __Host-partitioned-cookie יש את מפתח החלוקה https://chips-site-b.glitch.me.
קובצי Cookie מאתר ב' בכרטיסייה 'אפליקציה של כלי פיתוח' כשמבקרים באתר ב' כאתר ברמה העליונה. __Host-partitioned-cookie כולל את מפתח החלוקה https://chips-site-b.glitch.me.

אם חוזרים לאתר א', unpartitioned-cookie שמור בדפדפן אבל לא ניתן יהיה לגשת אליו מאתר א'.

  1. לוחצים על מעבר לאתר א'.
  2. לוחצים על הכרטיסייה רשתות.
  3. לוחצים על https://chips-site-b.glitch.me.
  4. לוחצים על הכרטיסייה Cookies (קובצי Cookie).

בזמן השהייה באתר א', אמור להופיע __Host-partitioned-cookie עם מפתח החלוקה של האתר ברמה העליונה https://chips-site-a.glitch.me.

הכרטיסייה 'רשת' שמציגה קובצי cookie מאתר iframe באתר ב', שניתן לגשת אליהם כשהוא מוטמע באתר א'.

אם מסמנים את האפשרות הצגת בקשות לקובצי cookie מסוננים, כלי הפיתוח יראו שקובץ ה-cookie ללא המחיצות חסום, מודגש בצהוב עם הסבר קצר: "קובץ ה-cookie הזה נחסם עקב העדפות משתמש".

הכרטיסייה 'רשת' שמוצגים בה קובצי Cookie חסומים מאתר ב-iframe.

באפליקציה > אחסון > קובצי Cookie לוחצים על https://chips-site-b.glitch.me יוצגו:

  • unpartitioned-cookie מחליפים במפתח המחיצה הריק.
  • __Host-partitioned-cookie קובץ Cookie עם מפתח החלוקה https://chips-site-a.glitch.me.
קובצי Cookie מאתר ב' בכרטיסייה 'אפליקציה של כלי פיתוח'. לקובץ Cookie של __Host-partitioned-cookie יש את מפתח החלוקה https://chips-site-a.glitch.me. unpartitioned-cookie מוצג, אבל לא נגיש לאתר ב' iframe כשהוא מוטמע באתר א'.

מחיקת קובצי Cookie

כדי לאפס את ההדגמה, מנקים את כל קובצי ה-Cookie של האתר:

  • מקישים על Control+Shift+J (או על Command+Option+J ב-Mac) כדי לפתוח את כלי הפיתוח.
  • לוחצים על הכרטיסייה Application.
  • עוברים אל Application > אחסון > קובצי cookie.
  • לוחצים לחיצה ימנית על https://chips-site-b.glitch.me.
  • לוחצים על ניקוי.

משאבים