Browser Support
כל קובץ Cookie מכיל צמד מפתח/ערך ומספר מאפיינים שקובעים מתי ואיפה משתמשים בקובץ ה-Cookie הזה.
המאפיין SameSite (שמוגדר ב-RFC6265bis) מאפשר לכם להצהיר אם קובץ ה-Cookie מוגבל להקשר של צד ראשון או של אותו אתר. חשוב להבין מה בדיוק המשמעות של "אתר" בהקשר הזה.
האתר הוא השילוב של סיומת האתר והחלק של הדומיין שמופיע ממש לפניו. לדוגמה, הדומיין www.web.dev הוא חלק מהאתר web.dev.
מונח מפתח: אם המשתמש נמצא ב-www.web.dev ומבקש תמונה מ-static.web.dev, זו בקשה באותו אתר.
רשימת הסיומות הציבוריות מגדירה אילו דפים נחשבים כדפים באותו אתר. היא לא תלויה רק בדומיינים ברמה העליונה כמו .com, אלא יכולה לכלול גם שירותים כמו github.io. כך your-project.github.io ו-my-project.github.io ייחשבו כאתרים נפרדים.
מונח מפתח: אם המשתמש נמצא ב-your-project.github.io ומבקש תמונה מ-my-project.github.io, זו בקשה בין אתרים.
צריך להשתמש במאפיין SameSite כדי להצהיר על שימוש בקובצי Cookie
המאפיין SameSite בקובץ Cookie מספק שלוש דרכים שונות לשלוט בהתנהגות הזו. אפשר לבחור לא לציין את המאפיין, או להשתמש ב-Strict או ב-Lax כדי להגביל את קובץ ה-Cookie לבקשות מאותו אתר.
אם מגדירים את SameSite לערך Strict, אפשר לשלוח את קובץ ה-Cookie רק בהקשר של נתונים שנאספים ישירות ממשתמשים. כלומר, אם האתר של קובץ ה-Cookie תואם לאתר שמוצג בסרגל הכתובות של הדפדפן. לכן, אם קובץ ה-Cookie של promo_shown מוגדר כך:
Set-Cookie: promo_shown=1; SameSite=Strict
כשהמשתמש נמצא באתר שלכם, קובץ ה-Cookie נשלח עם הבקשה כצפוי.
עם זאת, אם המשתמש נכנס לאתר שלכם דרך קישור מאתר אחר, קובץ ה-Cookie לא נשלח בבקשה הראשונית הזו.
ההגדרה הזו מתאימה לקובצי Cookie שקשורים לתכונות שמופיעות תמיד אחרי הניווט הראשוני, כמו שינוי סיסמה או ביצוע רכישה, אבל היא מגבילה מדי לקובצי Cookie כמו promo_shown. אם הקורא לוחץ על הקישור לאתר, הוא רוצה שקובץ ה-Cookie יישלח כדי שההעדפה שלו תיושם.
הערך SameSite=Lax מאפשר לדפדפן לשלוח את קובץ ה-Cookie עם הניווטים האלה ברמה העליונה. לדוגמה, אם אתר אחר מפנה לתוכן של האתר שלכם, במקרה הזה באמצעות תמונת החתול שלכם וקישור למאמר שלכם, באופן הבא:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
עם קובץ Cookie שמוגדר ל-Lax באופן הבא:
Set-Cookie: promo_shown=1; SameSite=Lax
כשהדפדפן מבקש את amazing-cat.png בשביל הבלוג של האדם האחר, האתר שלכם לא שולח את קובץ ה-Cookie. עם זאת, כשהקורא לוחץ על הקישור אל cat.html באתר שלכם, הבקשה הזו כוללת את קובץ ה-cookie.
מומלץ להשתמש ב-SameSite באופן הזה, להגדיר קובצי Cookie שמשפיעים על תצוגת האתר ל-Lax, וקובצי Cookie שקשורים לפעולות של משתמשים ל-Strict.
אפשר גם להגדיר את SameSite לערך None כדי לציין שרוצים שקובץ ה-Cookie יישלח בכל ההקשרים. אם אתם מספקים שירות שאתרים אחרים משתמשים בו, כמו ווידג'טים, תוכן מוטמע, תוכניות שותפים, פרסום או כניסה לחשבון במספר אתרים, השתמשו ב-None כדי להבהיר את הכוונה שלכם.
None, Lax או Strict.
שינויים בהתנהגות ברירת המחדל בלי SameSite
Browser Support
המאפיין SameSite נתמך באופן נרחב, אבל לא נעשה בו שימוש נרחב.
בעבר, אם הגדרתם קובצי Cookie בלי SameSite, ברירת המחדל הייתה לשלוח אותם בכל ההקשרים, מה שחשף את המשתמשים ל-CSRF ולדליפת מידע לא מכוונת. כדי לעודד מפתחים להצהיר על הכוונה שלהם ולספק למשתמשים חוויה בטוחה יותר, ההצעה של IETF, Incrementally Better Cookies, מציגה שני שינויים עיקריים:
- קובצי Cookie ללא מאפיין
SameSiteמטופלים כ-SameSite=Lax. - קובצי Cookie עם
SameSite=Noneצריכים לציין גם אתSecure, כלומר הם דורשים הקשר מאובטח.
שני השינויים האלה תואמים לאחור לדפדפנים שהטמיעו בצורה נכונה את הגרסה הקודמת של המאפיין SameSite, וגם לדפדפנים שלא תומכים בגרסאות קודמות של SameSite. הם נועדו להפחית את ההסתמכות של המפתחים על התנהגות ברירת המחדל של הדפדפנים, על ידי הגדרה מפורשת של התנהגות קובצי ה-Cookie והשימוש המיועד בהם. כל לקוח שלא מזהה את SameSite=None צריך להתעלם ממנו.
SameSite=Lax כברירת מחדל
אם שולחים קובץ Cookie בלי לציין את המאפיין SameSite שלו, הדפדפן מתייחס לקובץ ה-Cookie הזה כאילו הוא מוגדר כ-SameSite=Lax. אנחנו עדיין ממליצים להגדיר את SameSite=Lax באופן מפורש כדי שחוויית המשתמש תהיה עקבית יותר בדפדפנים שונים.
הערך של SameSite=None חייב להיות מאובטח
כשיוצרים קובצי Cookie חוצי-אתרים באמצעות SameSite=None, צריך גם להגדיר אותם ל-Secure כדי שהדפדפן יקבל אותם:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
אפשר לבדוק את אופן הפעולה הזה החל מגרסה 76 של Chrome על ידי הפעלת about://flags/#cookies-without-same-site-must-be-secure, והחל מגרסה 69 של Firefox על ידי הגדרת network.cookie.sameSite.noneRequiresSecure ב-about:config.
אנחנו ממליצים גם לעדכן את קובצי ה-Cookie הקיימים ל-Secure בהקדם האפשרי.
אם אתם מסתמכים על שירותים שמספקים תוכן של צד שלישי באתר שלכם, ודאו שספק השירות מעדכן את קובצי ה-Cookie שלו, ועדכנו את כל קטעי הקוד או יחסי התלות באתר שלכם כדי לוודא שהוא משתמש בהתנהגות החדשה.
מתכונים לעוגיות SameSite
במאמר SameSite cookie recipes מוסבר איך לעדכן את קובצי ה-Cookie כדי להתמודד עם השינויים ב-SameSite=None ועם ההבדלים בהתנהגות של הדפדפנים.
תודה רבה על התרומה והמשוב של לילי צ'ן, מאלטה אובל, מייק ווסט, רוב דודסון, טום שטיינר וויווק סקהאר.