הסבר על קובצי cookie

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

קובץ cookie הוא קובץ קטן שאתרים מאחסנים במחשב של המשתמשים שלהם, והמידע שהוא מאחסן עובר בין הדפדפן לאתר.

כל קובץ cookie הוא זוג מפתח/ערך, יחד עם מספר מאפיינים ששולטים במועד ובמיקום שבהם נעשה בו שימוש. המאפיינים האלה משמשים להגדרת דברים כמו תאריכי תפוגה או לציון שצריך לשלוח את קובץ ה-cookie רק דרך HTTPS. אפשר להגדיר קובץ cookie בכותרת HTTP או דרך ממשק JavaScript.

קובצי Cookie הם אחת מהשיטות הזמינות להוספת מצב קבוע לאתרים. עם השנים, היכולות שלהם התרחבו והתפתחו, אבל הפלטפורמה נשארה עם בעיות מדור קודם. כדי לטפל בבעיה הזו, אנחנו משנים את ההתנהגות של הדפדפנים (כולל Chrome,‏ Firefox ו-Edge) כדי לאכוף הגדרות ברירת מחדל שמגנות יותר על הפרטיות.

קובצי cookie בפעולה

נניח שיש לכם בלוג שבו אתם רוצים להציג למשתמשים קידום מכירות מסוג 'מה חדש'. המשתמשים יכולים לסגור את המבצע ולא יראו אותו שוב במשך זמן מה. אפשר לשמור את ההעדפה הזו בקובץ cookie, להגדיר את התוקף שלה לחודש (2,600,000 שניות) ולשלוח אותה רק דרך HTTPS. הכותרת הזו תיראה כך:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
שלושה קובצי cookie שנשלחים לדפדפן משרת בתגובה
שרתים מגדירים קובצי cookie באמצעות הכותרת Set-Cookie.

כשהקורא מציג דף שעומד בדרישות האלה – הוא נמצא בחיבור מאובטח וקובץ ה-cookie נוצר לפני פחות מחודש – הדפדפן שלו ישלח את הכותרת הזו בבקשה:

Cookie: promo_shown=1
שלושה קובצי cookie שנשלחים מדפדפן לשרת בבקשה
הדפדפן שולח קובצי cookie בחזרה בכותרת Cookie.

אפשר גם להוסיף ולקרוא את קובצי ה-cookie שזמינים לאתר הזה ב-JavaScript באמצעות document.cookie. הקצאה של document.cookie תיצור או תשנה קובץ cookie עם המפתח הזה. לדוגמה, אפשר לנסות את הקוד הבא במסוף JavaScript של הדפדפן:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

קריאה של document.cookie תפיק את הפלט של כל קובצי ה-cookie הזמינים בהקשר הנוכחי, כאשר כל קובץ cookie מופרד באמצעות נקודה-פסיק:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
JavaScript שגישה לקובצי cookie בדפדפן
JavaScript יכול לגשת לקובצי cookie באמצעות document.cookie.

אם תנסו לעשות זאת באתרים פופולריים נבחרים, תבחינו שרובם מגדירים הרבה יותר משלושה קובצי cookie. ברוב המקרים, קובצי ה-cookie האלה נשלחים בכל בקשה לדומיין הזה, ויש לכך כמה השלכות. בדרך כלל רוחב הפס של ההעלאה מוגבל יותר מההורדה, ולכן התקורה על כל הבקשות היוצאות מוסיפה עיכוב בזמן הבייט הראשון. מומלץ להשתמש במספר קטן של קובצי cookie ובקובצי cookie בגודל קטן. מומלץ להשתמש במאפיין Max-Age כדי לוודא שקובצי cookie לא נשארים יותר מדי זמן.

מהם קובצי cookie מהדומיין הנוכחי של בעל התוכן הדיגיטלי וקובצי cookie של צד שלישי?

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

שלושה קובצי cookie שנשלחים לדפדפן מבקשות שונות באותו דף
קובצי cookie יכולים להגיע ממגוון דומיינים שונים בדף אחד.

בהמשך לדוגמה שלמעלה, נניח שאחד מהפוסטים בבלוג שלכם כולל תמונה של חתול מדהים במיוחד, והוא מתארח בכתובת /blog/img/amazing-cat.png. התמונה כל כך מדהימה שאדם אחר משתמש בה ישירות באתר שלו. אם מבקר נכנס לבלוג שלכם ויש לו את קובץ ה-cookie promo_shown, כשהוא יצפה ב-amazing-cat.png באתר של האדם האחר, קובץ ה-cookie הזה יישלח בבקשה הזו לתמונה. הדבר לא שימושי במיוחד לאף אחד, כי promo_shown לא משמש לשום דבר באתר של האדם השני, אלא רק מוסיף עלות לטיפול בבקשה.

אם זהו אפקט לא מכוון, למה כדאי לעשות זאת? המנגנון הזה מאפשר לאתרים לשמור את המצב שלהם כשמשתמשים בהם בהקשר של צד שלישי. לדוגמה, אם תטמיעו באתר סרטון YouTube, המבקרים יראו בנגן את האפשרות 'לצפייה בהמשך'. אם המבקר כבר מחובר ל-YouTube, הסשן הזה זמין בנגן המוטמע באמצעות קובץ cookie של צד שלישי. המשמעות היא שהלחצן 'לצפייה בהמשך' ישמור את הסרטון בבת אחת, במקום לבקש מהמבקר להיכנס לחשבון או להוציא אותו מהדף שלכם ולהחזיר אותו ל-YouTube.

אותו קובץ cookie שנשלח בשלושה הקשרים שונים
קובץ cookie בהקשר של צד שלישי נשלח כשמבקרים בדפים שונים.

אחד המאפיינים התרבותיים של האינטרנט הוא שהוא בדרך כלל פתוח כברירת מחדל. זהו אחד מהגורמים שאפשרו לאנשים רבים ליצור תוכן ואפליקציות משלהם. עם זאת, הדבר גרם גם למספר סוגיות אבטחה ופרטיות. התקפות של זיוף בקשות בין אתרים (CSRF) מבוססות על העובדה שקובצי cookie מצורפים לכל בקשה למקור נתון, לא משנה מי יזם את הבקשה. לדוגמה, אם נכנסים אל evil.example, הוא עשוי להפעיל בקשות אל your-blog.example, והדפדפן יצרף בשמחה את קובצי ה-cookie המשויכים. אם הבלוג שלך לא בודק איך הוא מאמת את הבקשות האלה, evil.example עלול לבצע פעולות כמו מחיקת פוסטים או הוספת תוכן משלו.

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

אפשר להצהיר באופן מפורש על הכוונה שלכם בקובץ cookie, על ידי הגדרת מאפיין SameSite המתאים.

כדי לזהות את קובצי ה-cookie מהדומיין הנוכחי ולהגדיר מאפיינים מתאימים, כדאי לעיין במאמר מתכונים לקובצי cookie מהדומיין הנוכחי.