ערך חדש של allow-same-site-none-cookies בארגז חול מ-Chrome 135

Natalia Markoborodova
Natalia Markoborodova

מגרסה 135 של Chrome, אפשר להשתמש בערך החדש sandbox: allow-same-site-none-cookies. אם המדיניות הזו מוגדרת וקובצי Cookie של צד שלישי לא זמינים, הדפדפן ישלח רק קובצי Cookie מסוג SameSite=None בבקשות HTTP שמקורן ב-iframe של ארגז חול של צד ראשון.

מה זה sandboxed iframe?

מסגרות iframe עם ארגז חול הן מסגרות iframe עם הגבלות מיוחדות. הם נחשבים כבעלי מקור null, אטום. כברירת מחדל, תכונות שעלולות להיות מזיקות, כמו סקריפטים, טפסים וחלונות קופצים, לא זמינות ב-iframes שבארגז חול (sandbox).

משתמשים במאפיין sandbox כדי לציין אילו תכונות צריכות להיות זמינות ב-iframe בארגז חול. לדוגמה:

 <iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>

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

למה אנחנו צריכים את המדיניות החדשה הזו?

לפני ההשקה של allow-same-site-none-cookies, יכולתם להגדיר שני תרחישים של קובצי Cookie ב-sandboxed iframe:

  • בלי הטוקן allow-same-origin במאפיין sandbox, המקור של ה-iframe עובר סריאליזציה בתור null, ולכן כל הבקשות מהדף שמוגדר לו ארגז חול הן בקשות בין אתרים. במקרה הזה, רק קובצי Cookie עם SameSite=None ייכללו בבקשות.
  • אם משתמשים בטוקן allow-same-origin במאפיין sandbox, המערכת מתייחסת לבקשות כאילו הן מגיעות מהמקור האמיתי של ה-iframe, וכך מאפשרת לשלוח קובצי Cookie עם כל ערך של SameSite.

כשקובצי Cookie של צד שלישי חסומים, לא ניתן לשלוח קובצי Cookie מ-iframe עם ארגז חול שחסר לו allow-same-origin, אלא אם מפעילים את allow-same-site-none-cookies.

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

באמצעות allow-same-site-none-cookies, אפשר לשלוח קובצי Cookie מסוג SameSite=None בבקשות HTTP מתוך iframe, אבל קובצי Cookie מסוג SameSite=Strict ו-SameSite=Lax, שעשויים להיות רגישים, לא ייכללו.

דוגמה מעשית

נניח שיש אתר, practice-coding.example, שמאפשר למשתמשים ליצור ולהפעיל פרויקטים של קידוד בהתאמה אישית ולהטמיע קוד של משתמשים אחרים. כדי להשתמש בשירות, המשתמשים צריכים להיכנס לחשבון, וכתוצאה מכך מוגדר קובץ Cookie של סשן ב-SameSite=Strict.

משתמש אחר יוצר פרויקט, practice-coding.example/cookie-theft, שמשתמשים אחרים יכולים להטמיע בפרויקטים שלהם כ-iframe בלי לדעת. אם קובצי ה-Cookie‏ SameSite=Strict ו-SameSite=Lax נחשפים ל-iframe‏ practice-coding.example/cookie-theft, משתמש זדוני יכול לגנוב קובצי Cookie של סשנים של משתמשים אחרים.

בתרחיש הזה, בעלי האתר עשויים לרצות להגביל את הגישה לקובצי Cookie שעשויים להכיל מידע רגיש. עם זאת, יכול להיות שהם עדיין ירצו לאפשר קובצי Cookie של SameSite=None בתוך iframe עם ארגז חול. לדוגמה, practice-coding.example/coding-interview יכול להיות ש-iframe עם ארגז חול ידרוש קובצי Cookie כדי לאפשר למועמדים לחזור לקוד שלהם.SameSite=Noneallow-same-site-none-cookies מונע חשיפה של כל קובצי ה-Cookie, ומאפשר באופן סלקטיבי את קובצי ה-Cookie הנחוצים של SameSite=None.

איך מאפשרים רק SameSite=None בתוך מסגרות sandboxed iframe מהדומיין הנוכחי?

כדי להפעיל קובצי Cookie של SameSite=None בבקשות מדפים ב-sandbox מהדומיין הנוכחי, צריך לציין את הטוקן allow-same-site-none-cookies בתג iframe. לדוגמה:

 <iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>

אפשר גם להגדיר מדיניות allow-same-site-none-cookies באמצעות כותרת HTTP Content-Security-Policy:

Content-Security-Policy: sandbox allow-same-site-none-cookies;

אתם יכולים לנסות בעצמכם באמצעות ההדגמה שלנו.

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

אפשר לפתוח בעיה כדי לשתף משוב או לדווח על בעיות, או להצטרף לדיון ב-GitHub.