הסבר על קובצי cookie מסוג SameSite

תמיכה בדפדפן

  • Chrome: 51.
  • קצה: 16.
  • Firefox: 60.
  • Safari: 13.

מקור

כל קובץ 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 כדי לוודא שהכוונה שלך ברורה.

שלושה קובצי cookie שמסומנים כ&#39;ללא&#39;, &#39;לקס&#39; או &#39;קפדני&#39; בהתאם להקשר
לסמן במפורש את ההקשר של קובץ cookie בתור None, Lax או Strict.

שינויים בהתנהגות ברירת המחדל ללא SameSite

תמיכה בדפדפן

  • Chrome: 80.
  • קצה: 86.
  • Firefox: מאחורי דגל.
  • Safari: לא נתמך.

יש תמיכה במאפיין SameSite באופן נרחב, אבל לא נעשה בו שימוש נרחב. בעבר, הגדרת קובצי Cookie ללא SameSite כברירת מחדל היא שליחתם כל ההקשרים, וכך המשתמשים פגיעים ל-CSRF ולשימוש לא מכוון דליפת מידע. לעודד מפתחים לציין את הכוונה שלהם ולספק למשתמשים חוויה בטוחה יותר, הצעת IETF, קובצי 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

כדי לבדוק את ההתנהגות הזו החל מ-Chrome 76, צריך להפעיל about://flags/#cookies-without-same-site-must-be-secure, ומ-Firefox 69 על ידי הגדרה של network.cookie.sameSite.noneRequiresSecure about:config.

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

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

תודה על המשוב והמשוב של Lily Chen, Malte Ubl, Mike מערב, רוב דודסון, תום סטיינר וויוק סקהר.

תמונה ראשית (Hero) של קובץ cookie מאת פיל-ריין פריסק על ביטול הפתיחה