כל קובץ 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
כדי לוודא שהכוונה שלכם ברורה.
שינויים בהתנהגות ברירת המחדל ללא SameSite
תמיכה בדפדפנים
יש תמיכה רחבה במאפיין SameSite
, אבל הוא לא נמצא בשימוש נרחב.
בעבר, אם מגדירים קובצי cookie ללא SameSite
, הם נשלחו כברירת מחדל בכל ההקשרים, ולכן המשתמשים חשופים ל-CSRF ולדליפת מידע לא מכוונת. כדי לעודד מפתחים לציין את כוונתם ולספק למשתמשים חוויה בטוחה יותר, הצעת IETF, שנקראת Incrientally Better Cookie, כוללת שני שינויים עיקריים:
- קובצי 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
מתכונים לקובצי cookie
לפרטים נוספים על עדכון קובצי ה-Cookie כדי לטפל בהצלחה בשינויים האלה ב-SameSite=None
ובהבדלים בהתנהגות הדפדפן, כדאי לעיין במאמר ההמשך, מתכונים של SameSite לקובצי Cookie.
תודה על המשוב והמשוב של Lily Chen, Malte Ubl, Mike West, רוב דודסון (Tom Steiner), ויווק סקהר (Vvek Sekhar).
התמונה הראשית של קובץ ה-Cookie מאת Pille-Riin Priske ב-Unbounce