שימוש במדיניות HSTS חזקה

פרוטוקולים של טקסט רגיל, כמו HTTP, יכולים להיות פגיעים להתקפות האזנה, שבהן תוקף יכול לקרוא את התוכן שמועבר. פרוטוקול Transport Layer Security ‏ (TLS) יכול להצפין את התנועה ולהקשות מאוד על תוקפים להשתמש בנתונים האלה אם הם נלכדים.

עם זאת, תוקפים יכולים לעקוף את TLS על ידי אילוץ חיבורים מוצפנים להשתמש ב-HTTP בטקסט גלוי. כדי לפתור את הבעיה הזו, אפשר להשתמש בכותרת התגובה HTTP Strict Transport Security‏ (HSTS). ‫HSTS מאלץ את הדפדפן של המשתמש לבקר באתר באמצעות TLS, ולא מאפשר לו לחזור ל-HTTP בטקסט פשוט למשך זמן מוגדר.

Browser Support

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 4.
  • Safari: 7.

Source

איך הביקורת של Lighthouse נכשלת

אזהרה בדוח Lighthouse שלא נמצאה כותרת תגובה של HSTS.

הביקורת מציינת את הבעיות הבאות בכותרת 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.

כדי להפחית את הסיכונים שקשורים להשקה, מומלץ להשתמש בגישה מדורגת:

  1. מתחילים עם max-age קטן ומוסיפים רק includeSubDomains (לא preload):

    max-age=3600; includeSubDomains
    
  2. אחרי תקופת צינון (למשל שבוע) שבה לא דווחו בעיות, מגדילים את max-age. לדוגמה:

    max-age=604800; includeSubDomains
    
  3. אם השלב הראשוני הזה יצליח למשך תקופה ארוכה (למשל שלושה חודשים), האתר ותתי-הדומיינים שלו יתווספו לרשימת הטעינה מראש של HSTS, וההנחיה preload תתווסף.

    max-age=63072000; includeSubDomains; preload