מה זה עוגיות - Cookies מוסבר, ולמה זה בסיס לכל מי שרוצה להבין אבטחת אתרים¶
כמעט כל אתר שאתם נכנסים אליו שם לכם עוגייה קטנה בדפדפן בלי ששמתם לב. זה נשמע תמים, וזה גם באמת שימושי מאוד, אבל זו גם אחת הנקודות הראשונות שתוקפים בודקים כשהם מנסים לפרוץ לאתר. אז בואו נבין מה זה בעצם עוגיות, איך הן עובדות, ולמה כל מי שלומד אבטחת אתרים חייב להכיר אותן לעומק.
אז מה זו בעצם עוגייה¶
HTTP, הפרוטוקול שעליו האינטרנט מבוסס, הוא פרוטוקול חסר זיכרון. כל בקשה שהדפדפן שולח לשרת עומדת בפני עצמה, והשרת לא "זוכר" אתכם מבקשה לבקשה. הבעיה היא שרוב האתרים שאתם מכירים כן צריכים לזכור מי אתם - כדי לא לבקש מכם להתחבר מחדש בכל עמוד, למשל.
כאן נכנסות העוגיות. עוגייה - Cookie - היא פיסת מידע קטנה שהשרת שולח לדפדפן, בדרך כלל אחרי התחברות מוצלחת, והדפדפן שומר אותה ומצרף אותה אוטומטית לכל בקשה עתידית לאותו אתר. כך השרת "זוכר" אתכם, גם שאין לו זיכרון אמיתי בין בקשות.
איך זה נראה בפועל¶
כשאתם מתחברים לאתר, השרת מחזיר תשובה עם כותרת בשם Set-Cookie, שמכילה בדרך כלל מזהה סשן - מחרוזת אקראית שמייצגת את החיבור שלכם. הדפדפן שומר את המחרוזת הזאת, ובכל בקשה הבאה שולח אותה בחזרה בכותרת Cookie. השרת מקבל את המזהה, מסתכל אותו מול טבלה פנימית שלו, ויודע מי אתם בלי שתצטרכו להזין סיסמה שוב.
חשוב להבין - העוגייה עצמה כמעט תמיד לא מכילה את שם המשתמש או הסיסמה שלכם. היא רק מפתח שמצביע על מידע שיושב בצד השרת. זו בדיוק הסיבה שגניבת עוגייה שקולה כמעט לגניבת זהות - מי שמחזיק במפתח, נכנס לחשבון בלי לדעת בכלל את הסיסמה.
סוגי עוגיות - סשן מול קבועות¶
יש שני סוגים עיקריים של עוגיות, וההבדל ביניהן פשוט אבל משמעותי:
- עוגיות סשן - Session Cookies. נשמרות רק כל עוד הדפדפן פתוח, ונמחקות ברגע שסוגרים אותו. אלה בדרך כלל העוגיות שמחזיקות את החיבור שלכם לאתר.
- עוגיות קבועות - Persistent Cookies. נשמרות עד תאריך תפוגה מוגדר, גם אחרי שסגרתם וחזרתם לדפדפן. אלה משמשות למשל את פונקציית "זכור אותי", או למעקב פרסומי.
הדגלים שקובעים כמה עוגייה מאובטחת¶
כשמפתח יוצר עוגייה, הוא יכול להוסיף לה כמה דגלים שמשפיעים ישירות על רמת האבטחה שלה:
- HttpOnly. מונע מקוד JavaScript בדף לקרוא את העוגייה. זו הגנה חשובה מאוד נגד חולשות XSS - גם אם תוקף מצליח להריץ סקריפט זדוני בדף, הוא לא יוכל פשוט לגנוב את העוגייה דרכו.
- Secure. קובע שהעוגייה תישלח רק דרך חיבור HTTPS מוצפן, ולא דרך HTTP רגיל. בלי הדגל הזה, מישהו שמאזין לתעבורה ברשת פתוחה יכול לתפוס את העוגייה בקלות.
- SameSite. קובע האם העוגייה נשלחת גם כשהבקשה מגיעה מאתר חיצוני. זו הגנה מרכזית נגד חולשות CSRF, שבהן אתר זדוני מנסה לגרום לדפדפן שלכם לשלוח בקשה לאתר שבו אתם מחוברים, בלי שתדעו.
למה זה קריטי להבין בהקשר של אבטחת אתרים¶
עוגיות נמצאות בדיוק בצומת שבין נוחות למשתמש לבין סיכון אבטחתי. תוקף שמצליח לגנוב עוגיית סשן, בין אם דרך רשת לא מוצפנת, דרך חולשת XSS, או דרך תוכנה זדונית על המחשב של הקורבן, יכול להשתמש בה כדי להתחזות לאותו משתמש בלי לדעת סיסמה בכלל. זה נקרא חטיפת סשן - Session Hijacking - וזו אחת הדרכים הפשוטות והנפוצות ביותר להשתלט על חשבון.
זו הסיבה שכשבודקים חדירות בודקים אתר, אחת הבדיקות הראשונות שהם עושים היא פשוט להסתכל על העוגיות - אילו דגלים חסרים, האם המידע רגיש מדי, והאם אפשר לנחש או לזייף אותן.
אם אתם רוצים להעמיק בנושא ולעבור על כל התחום בצורה מסודרת ומעשית, כולל איך תוקפים בפועל מנצלים עוגיות פגיעות, מוזמנים לעבור על קורס פריצת אתרים למתחילים.
ואם משהו לא ברור באמצע הדרך, אתם לא צריכים להתמודד עם זה לבד. יש קהילה שלמה שדנה בדיוק בשאלות כאלה.
לסיכום¶
עוגיות הן אחד המנגנונים הכי בסיסיים באינטרנט, ובדיוק בגלל זה הן גם אחת הנקודות הראשונות שבודקים כשמנתחים את אבטחת אתר. עוגייה מוגדרת נכון, עם הדגלים המתאימים, יכולה למנוע התקפות שלמות. עוגייה מוגדרת רשלנית יכולה להיות הדלת הפתוחה שתוקף מחפש.