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

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

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

מה גורם לבדיקה של Lighthouse להיכשל

אזהרה בביקורת של Lighthouse על כך שלא נמצאה כותרת תגובה של HSTS.
דוח Lighthouse עם אזהרה על כך שלא נמצאה כותרת תגובה של HSTS.

הביקורת תסמן את הבעיות הבאות בכותרת 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 תחול.

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

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

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

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

    max-age=63072000; includeSubDomains; preload