אם תשכחו את הכותרת Cache-Control או תשתמשו בה לרעה, זה עלול להשפיע לרעה על האבטחה של האתר ועל הפרטיות של המשתמשים.
כברירת מחדל, תמיד מותר לשמור משאבים במטמון בכל סוג של מטמון.
אי-שימוש בכותרת Cache-Control
או שימוש לרעה בה עלולים להשפיע לרעה על האבטחה של האתר ועל פרטיות המשתמשים.
אם אתם רוצים לשמור פרטיות על תשובות מותאמות אישית, מומלץ:
- למנוע מגורמים מקשרים לשמור את המשאב במטמון. מגדירים את
Cache-Control: private
. - מגדירים מפתח מטמון משני מתאים.
אם התשובה משתנה בגלל קובצי cookie – מצב שיכול לקרות כשקובץ ה-cookie מאחסן פרטי כניסה – צריך להגדיר את הערך
Vary: Cookie
.
בהמשך נסביר למה זה חשוב, ונציג את הנושאים הבאים:
- בעיות אבטחה ופרטיות שאולי לא ידעתם עליהן
- סוגים שונים של מטמון HTTP ותפיסות מוטעות נפוצות
- פעולות מומלצות לאתרים בעלי ערך גבוה
סיכוני אבטחה ופרטיות שקשורים למטמון
משאבים עם דליפות מנקודות החולשה של Spectre
נקודת החולשה של Spectre מאפשרת לדף לקרוא את הזיכרון של תהליך במערכת הפעלה. כלומר, תוקף יכול לקבל גישה לא מורשית לנתונים ממקורות שונים. כתוצאה מכך, בדפדפני אינטרנט מודרניים הוגבלה השימוש בחלק מהתכונות שלהם – כמו SharedArrayBuffer
או טיימר ברזולוציה גבוהה – לדפים עם בידוד בין מקורות.
דפדפני אינטרנט מודרניים אוכפים את המדיניות בנושא הטמעה ממקורות שונים (COEP). כך מוודאים שהמשאבים שמגיעים ממקורות שונים:
- משאבים ציבוריים, שהבקשה לקבלתם נשלחה ללא קובצי cookie
- משאבים שמותר לשתף באופן מפורש בין מקורות, באמצעות CORS או הכותרת CORP
ההגדרה של COEP לא מונעת מתוקף לנצל את Spectre. עם זאת, היא מבטיחה שמשאבים ממקורות שונים לא יהיו בעלי ערך לתוקף (כשהם נטענים על ידי הדפדפן כמשאב ציבורי) או שמותר לשתף אותם עם התוקף (כשהם משותפים עם CORP: cross-origin
).
איך אחסון במטמון של HTTP משפיע על Spectre?
אם הכותרת Cache-Control
לא מוגדרת כראוי, תוקף יכול לבצע התקפה. לדוגמה:
- המשאב עם פרטי הכניסה נשמר במטמון.
- התוקף טוען דף מבודד ממקורות שונים.
- התוקף מבקש שוב את המשאב.
COEP:credentialless
מוגדר על ידי הדפדפן, כך שהאחזור של המשאב מתבצע ללא קובצי cookie. עם זאת, יכול להיות שהמטמון יחזיר את התגובה עם פרטי הכניסה במקום זאת.- לאחר מכן, התוקף יכול לקרוא את המשאב המותאם אישית באמצעות מתקפת Spectre.
למרות שמטמון ה-HTTP של דפדפן אינטרנט לא מאפשר להתקפה מהסוג הזה להתרחש בפועל, יש מטמון נוסף מחוץ לשליטה המיידית של הדפדפן. כתוצאה מכך, יכול להיות שההתקפה תצליח.
תפיסות מוטעות נפוצות לגבי מטמון HTTP
1. המשאבים מאוחסנים במטמון על ידי הדפדפן בלבד
בדרך כלל יש כמה שכבות של מטמון. חלק מהמאגרים מיועדים למשתמש יחיד, וחלקם לכמה משתמשים. חלק מהם נשלטים על ידי השרת, חלק על ידי המשתמש וחלק על ידי גורמים מקשרים.
- מטמון הדפדפן. המטמון הזה הוא בבעלות משתמש יחיד, והוא מיועד לו בלבד. הוא מוטמע בדפדפן האינטרנט שלו. הם משפרים את הביצועים על ידי הימנעות מאחזור של אותה תשובה כמה פעמים.
- שרת proxy מקומי. יכול להיות שהמשתמש התקין את התוכנה הזו, אבל היא יכולה להיות מנוהלת גם על ידי גורמים מקשרים: החברה, הארגון או ספק האינטרנט של המשתמש. שרתים proxy מקומיים שומרים בדרך כלל במטמון תגובה אחת לכמה משתמשים, והיא מהווה מטמון 'ציבורי'. לשרתי proxy מקומיים יש כמה תפקידים.
- שנשמר במטמון של שרת המקור או ב-CDN. השרת קובע את זה. מטרת המטמון של שרת המקור היא לצמצם את העומס על שרת המקור על ידי שמירת אותה תגובה במטמון עבור מספר משתמשים. המטרות של CDN דומות, אבל הוא מפוזר ברחבי העולם ומוקצה לקבוצת המשתמשים הקרובה ביותר כדי לקצר את זמן האחזור.

2. SSL מונע מגורמים מקשרים לשמור משאבי HTTPS במטמון
משתמשים רבים משתמשים באופן קבוע בשרתים proxy שהוגדרו באופן מקומי, בין אם למטרות גישה (למשל, שיתוף חיבור למדוד), לבדיקה של וירוסים או למטרות של מניעת אובדן נתונים (DLP). במטמון המתווך מתבצעת יירוט TLS.
לרוב, מטמון ביניים מותקן בתחנות העבודה של עובדי החברה. דפדפני האינטרנט מוגדרים לבטוח באישורים של שרת ה-proxy המקומי.
בסופו של דבר, יכול להיות שחלק מהמשאבים של HTTPS יאוחסנו במטמון על ידי שרת ה-proxy המקומי.
איך פועל מטמון HTTP
- כברירת מחדל, מותר באופן משתמע לשמור משאבים במטמון.
- מפתח המטמון הראשי מורכב מכתובת ה-URL והשיטה. (כתובת URL, שיטה)
- מפתח המטמון המשני הוא הכותרות שכלולות בכותרת
Vary
.Vary: Cookie
מציין שהתגובה תלויה ב-Cookie
. - הכותרת
Cache-Control
מספקת שליטה מדויקת יותר.
ביצוע הפעולות המומלצות האלה באתר
מפתחים של אתרים בעלי ערך גבוה, כולל אתרים עם נפח תנועה גבוה ואתרים שמבצעים אינטראקציה עם מידע אישי מזהה, צריכים לפעול כבר עכשיו כדי לשפר את האבטחה.
הסיכון הגדול ביותר מתרחש כשהגישה למשאב משתנה בהתאם לקובצי cookie. אם לא בוצעה פעולה מונעת, יכול להיות שמטמון ביניים יחזיר תגובה שביקשו באמצעות קובצי cookie לבקשה שלא ביקשו באמצעות קובצי cookie.
מומלץ לבצע את אחת מהפעולות הבאות:
- למנוע מגורמים מקשרים לשמור את המשאב במטמון. מגדירים את
Cache-Control: private
. - מגדירים מפתח מטמון משני מתאים.
אם התשובה משתנה בגלל קובצי cookie – מצב שיכול לקרות כשקובץ ה-cookie מאחסן פרטי כניסה – צריך להגדיר את הערך
Vary: Cookie
.
במיוחד, צריך לשנות את התנהגות ברירת המחדל: תמיד צריך להגדיר את Cache-Control
או את Vary
.
שיקולים נוספים
יש סוגים דומים אחרים של התקפות שמשתמשות במטמון ה-HTTP, אבל הן מסתמכות על מנגנון שונה מזה של בידוד בין מקורות (CORS). לדוגמה, ג'ייק ארקדיל מתאר כמה התקפות במאמר How to win at CORS.
חלק מדפדפני האינטרנט מפחיתים את ההתקפות האלה על ידי פיצול המטמון של HTTP שלהם, בהתאם לשאלה אם הבקשה לתגובה מהמשאב נשלחה עם פרטי כניסה או לא. נכון לשנת 2022, ב-Firefox המטמון מפוצל, אבל ב-Chrome וב-Safari הוא לא מפוצל. יכול להיות שנתחלק את המטמון ב-Chrome בעתיד. חשוב לזכור שההתקפות האלה שונות ומושלמות לחלוקה לפי המקור ברמה העליונה.
גם אם אפשר לצמצם את הבעיה בדפדפני אינטרנט, היא תישאר במטמון של שרת proxy מקומי. לכן, עדיין מומלץ לפעול לפי ההמלצות שלמעלה.
תמונה בכותרת של Ben Pattinson ב-Unsplash.