פרוטוקולים של טקסט רגיל, כמו HTTP, יכולים להיות פגיעים להתקפות האזנה, שבהן תוקף יכול לקרוא את התוכן שמועבר. פרוטוקול Transport Layer Security (TLS) יכול להצפין את התנועה ולהקשות מאוד על תוקפים להשתמש בנתונים האלה אם הם נלכדים.
עם זאת, תוקפים יכולים לעקוף את TLS על ידי אילוץ חיבורים מוצפנים להשתמש ב-HTTP בטקסט גלוי. כדי לפתור את הבעיה הזו, אפשר להשתמש בכותרת התגובה HTTP Strict Transport Security (HSTS). HSTS מאלץ את הדפדפן של המשתמש לבקר באתר באמצעות TLS, ולא מאפשר לו לחזור ל-HTTP בטקסט פשוט למשך זמן מוגדר.
איך הביקורת של Lighthouse נכשלת
הביקורת מציינת את הבעיות הבאות בכותרת HSTS:
- אם לא נמצאה כותרת HSTS בכלל.
- אם חסרה אחת מההוראות המומלצות (
max-age,includeSubDomains,preload) - אם משך הזמן של ההוראה
max-ageהוא פחות משנה (31536000 שניות). - אם יש שגיאת תחביר בניתוח הכותרת, כמו הנחיה לא מוכרת.
הגדרת מדיניות HSTS חזקה
ההגדרה האופטימלית של כותרת HSTS נראית כך:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
- ההנחיה
max-ageמציינת את משך הזמן שבו הדפדפן של המשתמש נאלץ לבקר באתר רק באמצעות TLS (בשניות). אחרי שהזמן חולף, המשתמשים יכולים לגשת לאתר באמצעות HTTP רגיל שוב, אם האתר לא מספק כותרת HSTS (או הפניות זמניות מ-HTTP ל-HTTPS). - הגדרת ההנחיה
includeSubDomainsמחייבת את הכותרת בכל תת-הדומיינים של כתובת ה-URL של הדף ששולח את הכותרת מלכתחילה. לדוגמה, אם כותרת HSTS נשלחת על ידיgoogle.comוכוללת את ההוראהincludeSubDomains, כותרת ה-HSTS תיאכף ב-mail.google.com. - הגדרת ההנחיה
preloadושליחת הדומיין אל שירות הטעינה מראש של HSTS יגרמו להידור הדומיין לקבצים בינאריים של הדפדפן שמשתמשים ברשימת HSTS שנטענה מראש. זה נכון גם לגבי דפדפנים אחרים, לא רק Google Chrome.
יש סיכונים מסוימים בהטמעה של כותרת HSTS. כל התכונות שדורשות חיבור HTTP לא מוצפן לא יפעלו למשך הזמן שמוגדר בהנחיה max-age. יכול להיות שאפילו יותר זמן אם מוחלת ההוראה preload.
כדי להפחית את הסיכונים שקשורים להשקה, מומלץ להשתמש בגישה מדורגת:
מתחילים עם
max-ageקטן ומוסיפים רקincludeSubDomains(לאpreload):max-age=3600; includeSubDomainsאחרי תקופת צינון (למשל שבוע) שבה לא דווחו בעיות, מגדילים את
max-age. לדוגמה:max-age=604800; includeSubDomainsאם השלב הראשוני הזה יצליח למשך תקופה ארוכה (למשל שלושה חודשים), האתר ותתי-הדומיינים שלו יתווספו לרשימת הטעינה מראש של HSTS, וההנחיה
preloadתתווסף.max-age=63072000; includeSubDomains; preload