פרוטוקולים של טקסט ללא הצפנה, כמו HTTP, עלולים להיות חשופים להתקפות של האזנה לרשת, שבהן תוקף יכול לקרוא את התוכן המועבר. למרבה המזל, אפשר להשתמש ב-Transport Layer Security (TLS) כדי להצפין את התנועה ולקשות על תוקפים להשתמש בנתונים האלה אם הם יתועדו.
עם זאת, תוקפים יכולים לעקוף את TLS על ידי אילוץ חיבורים מוצפנים להשתמש ב-HTTP בטקסט ללא הצפנה. כדי לטפל בבעיה הזו, הוספנו את כותרת התגובה HTTP Strict Transport Security (HSTS), שמאלצת את הדפדפן של המשתמש להיכנס לאתר רק באמצעות TLS ולא לעבור ל-HTTP בטקסט ללא הצפנה (למשך זמן מוגדר).
מה גורם לבדיקה של Lighthouse להיכשל
הביקורת תסמן את הבעיות הבאות בכותרת HSTS:
- אם לא נמצאה כותרת HSTS בכלל.
- אם חסרה אחת מההוראות המומלצות (
max-age
, includedSubDomains
, preload
) - אם משך ההוראה
max-age
הוא פחות משנה (31,536,000 שניות). - אם יש שגיאת תחביר בזמן ניתוח הכותרת, למשל הוראה לא ידועה.
הגדרת מדיניות 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