לאפשר למפתחים להוסיף קובץ Cookie לאחסון 'מחולק למחיצות', עם קובץ Cookie נפרד לכל אתר ברמה העליונה.
סטטוס ההטמעה
- התכונה נתמכת כברירת מחדל ב-Chrome מגרסה 114 ואילך.
- גרסת המקור לניסיון, שהושלמה, הייתה זמינה בגרסאות 100 עד 116 של Chrome.
- קוראים את המאמרים כוונת ניסוי וכוונה לשלוח.
מה זה CHIPS?
התכונה Cookies Having Independent Partitioned State (קובצי Cookie עם חלוקה עצמאית למחיצות, CHIPS) מאפשרת למפתחים להוסיף קובץ Cookie לאחסון עם חלוקה למחיצות, עם צנצנות נפרדות של קובצי Cookie לכל אתר ברמה העליונה, וכך לשפר את הפרטיות והאבטחה של המשתמשים.
בלי חלוקה למחיצות, קובצי Cookie של צד שלישי מאפשרים לשירותים לעקוב אחרי משתמשים ולצרף את המידע שלהם ממגוון רחב של אתרים לא קשורים ברמה העליונה. הפעולה הזו נקראת מעקב בין אתרים.
CHIPS, Storage Access API וקבוצות של אתרים קשורים הן הדרכים היחידות לקרוא ולכתוב קובצי Cookie מהקשרים חוצי-אתרים, כמו iframe, כשקובצי 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 עם המאפיין Partitioned, קובץ ה-Cookie נשמר ב-Cookie Jar מחולק שמוגדר רק לקובצי Cookie שאתר ג' מגדיר כשהוא מוטמע באתר א'. הדפדפן ישלח את קובץ ה-Cookie הזה רק כשהאתר ברמה העליונה הוא A.
כשמשתמש נכנס לאתר חדש, למשל אתר ב', פריים C מוטמע לא יקבל את קובץ ה-Cookie שהוגדר כשהפריים הוטמע באתר א'.
אם משתמש מבקר באתר C כאתר ברמה העליונה, קובץ ה-Cookie המפוצל שהוגדר על ידי C כשהוא הוטמע ב-A לא יישלח גם בבקשה הזו.

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

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

לפני 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 שלא חולק למחיצות ולגשת אליו.

דרישות מוקדמות
- Chrome מגרסה 118 ואילך.
- נכנסים אל
chrome://flags/#test-third-party-cookie-phaseout
ומפעילים את ההגדרה הזו.
בדיקת קובצי Cookie עם חלוקה למחיצות באמצעות כלי הפיתוח
- נכנסים לכתובת https://chips-site-a.glitch.me.
- מקישים על
Control+Shift+J
(או עלCommand+Option+J
ב-Mac) כדי לפתוח את כלי הפיתוח. - לוחצים על הכרטיסייה Application (אפליקציה).
- עוברים אל Application > Storage > Cookies.
- לוחצים על
https://chips-site-b.glitch.me
.
כלי הפיתוח יציגו את כל קובצי ה-Cookie מהמקור שנבחר.

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

- לוחצים על Go to Site B (מעבר לאתר ב').
- בכלי הפיתוח, עוברים אל Application > Storage > Cookies.
- לוחצים על
https://chips-site-b.glitch.me
.

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

אם חוזרים לאתר א', unpartitioned-cookie
מאוחסן עכשיו בדפדפן, אבל אי אפשר לגשת אליו מאתר א'.
- לוחצים על מעבר לאתר א'.
- לוחצים על הכרטיסייה רשת.
- לוחצים על
https://chips-site-b.glitch.me
. - לוחצים על הכרטיסייה Cookies (קובצי Cookie).
כשנמצאים באתר א', אמור להופיע __Host-partitioned-cookie
עם מפתח המחיצה של האתר ברמה העליונה https://chips-site-a.glitch.me
.

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

בקטע Application > Storage > Cookies (אפליקציה > אחסון > קובצי Cookie), לחיצה על https://chips-site-b.glitch.me
תציג את:
-
unpartitioned-cookie
עם מפתח המחיצה הריק. - קובץ Cookie
__Host-partitioned-cookie
עם מפתח המחיצהhttps://chips-site-a.glitch.me
.

__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
. - לוחצים על ניקוי.
משאבים
- GitHub: אפשר לקרוא את ההסבר, לשאול שאלות ולעקוב אחרי הדיון.
- תמיכה למפתחים: אפשר לשאול שאלות ולהצטרף לדיונים במאגר התמיכה למפתחים של ארגז החול לפרטיות.