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

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

סטטוס ההטמעה

Browser Support

  • Chrome: 114.
  • Edge: 114.
  • Firefox: 141.
  • Safari: not supported.

Source

מה זה CHIPS?

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

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

‫CHIPS,‏ Storage Access API וקבוצות של אתרים קשורים הן הדרכים היחידות לקרוא ולכתוב קובצי Cookie מהקשרים חוצי-אתרים, כמו iframe, כשקובצי Cookie של צד שלישי חסומים.

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

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

כותרת Set-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 של הצד השלישי הזה.
בחלוקת קובצי Cookie למחיצות, שירות של צד שלישי שמגדיר קובץ Cookie כשהוא מוטמע באתר ברמה העליונה, לא יכול לגשת לאותו קובץ Cookie כשהשירות מוטמע באתרים אחרים ברמה העליונה.

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

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

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

תרשים שמראה שקובצי Cookie לא משותפים כשאותו צד שלישי מוטמע בשני אתרים שונים.
עם חלוקת קובצי 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
  • דומייני Sandbox להצגת תוכן משתמשים לא מהימן (כמו googleusercontent.com ו-githubusercontent.com)
  • רשתות CDN של צד שלישי שמשתמשות בקובצי Cookie כדי להציג תוכן שהגישה אליו מוגבלת לפי סטטוס האימות באתר של הצד הראשון (לדוגמה, תמונות פרופיל באתרים של רשתות חברתיות שמתארחים ברשתות CDN של צד שלישי)
  • מסגרות front-end שמסתמכות על ממשקי API מרוחקים באמצעות קובצי Cookie בבקשות שלהן
  • מודעות מוטמעות שצריכות להיות מוגבלות להיקף של מצב לכל בעל תוכן דיגיטלי (לדוגמה, תיעוד העדפות המודעות של המשתמשים באתר הזה)

למה CHIPS משתמשת במודל חלוקה למחיצות שדורש הסכמה

במקרים שבהם הגישה לקובצי 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 עם חלוקה למחיצות. כשהאתר C לא מוטמע, הוא לא יכול לגשת לקובץ ה-Cookie המופרד.
לאתר A ולאתר C המוטמע יש קובץ Cookie עם חלוקה למחיצות. אם אתר C לא מוטמע, הוא לא יכול לגשת לקובץ ה-Cookie המופרד.

לפני CHIPS

key=("support.chat.example")

אחרי CHIPS

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

עיצוב אבטחה

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

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

דוגמה:

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

חלופות ל-CHIPS

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

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

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

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

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

הדגמה (דמו)

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

באתר א' מוטמע iframe מאתר ב' שמשתמש ב-JavaScript כדי להגדיר שני קובצי Cookie: קובץ Cookie עם חלוקה למחיצות וקובץ Cookie ללא חלוקה למחיצות. באתר ב' מוצגים כל קובצי ה-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 > Storage > Cookies.
  5. לוחצים על https://chips-site-b.glitch.me.

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

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

אתר ב' יכול להגדיר את קובץ ה-Cookie המחולק רק בהקשר שבין כמה אתרים, וקובץ ה-Cookie שלא חולק ייחסם:

  • אמור להופיע __Host-partitioned-cookie עם מפתח החלוקה של האתר ברמה העליונה https://chips-site-a.glitch.me.
מפתח החלוקה למחיצות של __Host-partitioned-cookie.
  1. לוחצים על Go to Site B (מעבר לאתר ב').
  2. בכלי הפיתוח, עוברים אל Application > Storage > Cookies.
  3. לוחצים על https://chips-site-b.glitch.me.
אתר ב'
באתר B ברמה העליונה אפשר לראות את כל קובצי ה-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 של אתר ב'.

בקטע Application > Storage > Cookies (אפליקציה > אחסון > קובצי Cookie), לחיצה על https://chips-site-b.glitch.me תציג את:

  • unpartitioned-cookie עם מפתח המחיצה הריק.
  • קובץ Cookie‏ __Host-partitioned-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 > Storage > Cookies.
  • לוחצים לחיצה ימנית על https://chips-site-b.glitch.me.
  • לוחצים על ניקוי.

משאבים