קובץ 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 שנשלחים לדפדפן בתגובה](https://web.dev/static/articles/understanding-cookies/image/three-cookies-being-sent-1.png?authuser=5&hl=he)
Set-Cookie
.
כשהקורא מציג דף שעומד בדרישות האלה – הוא מחובר לחיבור מאובטח וקובץ ה-cookie בן פחות מחודש – הדפדפן שלו ישלח את הכותרת הבאה בבקשה שלו:
Cookie: promo_shown=1
![שלושה קובצי cookie שנשלחים מדפדפן לשרת בבקשה](https://web.dev/static/articles/understanding-cookies/image/three-cookies-being-sent-2.png?authuser=5&hl=he)
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 בתוך הדפדפן](https://web.dev/static/articles/understanding-cookies/image/javascript-accessing-cook-4ae4ebde94edc.png?authuser=5&hl=he)
document.cookie
.
אם תנסו זאת במגוון אתרים פופולריים, תראו שרובם מגדירים יותר משלושה קובצי Cookie בלבד. ברוב המקרים, קובצי ה-cookie האלה נשלחים בכל בקשה ובקשה לדומיין, ויש לה מספר השלכות. לרוב, רוחב הפס להעלאה מוגבל יותר מרוחב הפס להורדה אצל המשתמשים, ולכן התקורה על כל הבקשות היוצאות מוסיפה עיכוב בזמן שלכם עד לבייט הראשון. יש להקפיד על שימוש שמרני במספר ובגודל של קובצי cookie שמגדירים. השתמשו במאפיין Max-Age
כדי להבטיח שקובצי cookie לא מסתובבים יותר זמן מהנדרש.
מהם קובצי cookie מהדומיין הנוכחי ומהם קובצי cookie של צד שלישי?
אם חזרו לאותה בחירת אתרים שביקרתם בהם, סביר להניח ששמתם לב לכך שהיו קובצי cookie עבור מגוון דומיינים, לא רק זה שבו ביקרתם כרגע. קובצי cookie שתואמים לדומיין של האתר הנוכחי, כלומר מה שמוצג בסרגל הכתובות של הדפדפן, נקראים קובצי cookie מסוג first-party. באופן דומה, קובצי cookie מדומיינים שאינם האתר הנוכחי נקראים קובצי cookie של צד שלישי. התווית הזו לא מוחלטת, אלא יחסית להקשר של המשתמש. אותו קובץ cookie יכול להיות של צד ראשון או של צד שלישי, בהתאם לאתר שבו המשתמש נמצא באותו רגע.
![שלושה קובצי cookie שנשלחים לדפדפן מבקשות שונות באותו דף](https://web.dev/static/articles/understanding-cookies/image/three-cookies-being-sent-93367a53e4231.png?authuser=5&hl=he)
בהמשך לדוגמה שלמעלה, נניח שבאחד מהפוסטים בבלוג שלך יש תמונה של חתול מדהים במיוחד והוא מתארח ב-/blog/img/amazing-cat.png
. בגלל שזו תמונה כל כך מדהימה, אדם אחר משתמש בה ישירות באתר שלו. אם מבקר נכנס לבלוג שלך ויש לו
promo_shown
את קובץ ה-Cookie, אז כשהוא יצפה ב-amazing-cat.png
באתר של האדם האחר, קובץ ה-Cookie ישלח בבקשה הזו לתמונה. זה לא מועיל במיוחד לאף אחד כי promo_shown
לא משמש לשום דבר באתר של האדם הזה, אלא רק הוספת תקורה לבקשה.
אם זו השפעה לא מכוונת, למה כדאי לעשות זאת? המנגנון הזה מאפשר לאתרים לשמור על מצב כשהם בשימוש בהקשר של צד שלישי. לדוגמה, אם הטמעתם סרטון YouTube באתר, המבקרים יראו את האפשרות 'לצפייה בהמשך' בנגן. אם המבקר כבר מחובר ל-YouTube, ההפעלה הופכת לזמינה בנגן המוטמע באמצעות קובץ cookie של צד שלישי - כלומר, הלחצן 'לצפייה בהמשך' ישמור את הסרטון בפעם אחת במקום לבקש ממנו להיכנס או לנווט אותו אל מחוץ לדף ולחזור ל-YouTube.
![אותו קובץ cookie נשלח בשלושה הקשרים שונים](https://web.dev/static/articles/understanding-cookies/image/the-same-cookie-being-sen-8e25fd5cdbf86.png?authuser=5&hl=he)
אחד מהמאפיינים התרבותיים של האינטרנט הוא שלרוב, האתר פתוח כברירת מחדל. זה חלק ממה שאפשרו לכל כך הרבה אנשים ליצור שם תוכן ואפליקציות משלהם. עם זאת, הדבר גרם גם לכמה חששות בנוגע לאבטחה ולפרטיות. תקיפות של זיוף בקשות בין אתרים (CSRF) מסתמכות על העובדה שקובצי cookie מצורפים לכל בקשה למקור נתון, ללא קשר למי שיזם את הבקשה. לדוגמה, בביקור ב-evil.example
הוא יכול להפעיל בקשות אל your-blog.example
, והדפדפן יצרף בשמחה את קובצי ה-cookie המשויכים. אם הבלוג לא מאמת את הבקשות האלה, evil.example
יכול לגרום לפעולות כמו מחיקת פוסטים או הוספת תוכן של עצמו.
בנוסף, המשתמשים מודעים יותר לאופן שבו ניתן להשתמש בקובצי Cookie כדי לעקוב אחר הפעילות שלהם באתרים מרובים. עם זאת, עד עכשיו לא הייתה דרך להצהיר במפורש על הכוונה שלכם באמצעות קובץ ה-cookie. יש לשלוח את קובץ ה-cookie של promo_shown
רק בהקשר של צד ראשון, ואילו קובץ cookie של סשן של ווידג'ט שמיועד להיות מוטמע באתרים אחרים נמצא שם באופן מכוון כדי לספק את מצב הכניסה בהקשר של צד שלישי.
ניתן להצהיר במפורש על הכוונה באמצעות קובץ cookie על ידי הגדרת מאפיין SameSite המתאים.
כדי לזהות קובצי cookie מהדומיין הנוכחי ולהגדיר מאפיינים מתאימים, אפשר לעיין במאמר מתכונים לקובצי cookie מהדומיין הנוכחי.