איך ה-BBC משיק את HSTS לשיפור האבטחה והביצועים.

ה-BBC משיקים את HSTS באתר כדי לשפר את האבטחה והביצועים. הסבר על המשמעות של HSTS ועל האופן שבו HSTS יכול לעזור לך.

בשנים האחרונות חלה עלייה מתמדת בשימוש ב-HTTPS. לפי תקן Web Almanac לשנת 2021 של ארכיון HTTP, כ-91% מכל הבקשות גם למחשבים וגם לניידים נשלחו באמצעות HTTPS. HTTPS לא רק יכול להישאר כאן, אלא דרישה מוקדמת כדי להשתמש בתכונות כמו Service Worker ופרוטוקולים מודרניים כמו HTTP/2 ו-HTTP/3.

לאחרונה ניל קרייג – אדריכלי טכני ראשי ב-BBC – ציוץ על כך שאנחנו משיקים בהדרגה את HTTP Strict Transport Security (HSTS) עבור bbc.com. גלו מה המשמעות מבחינת ה-BBC ומה יכולה להיות לכך מבחינתכם.

בדרך כלל, שרתי אינטרנט מאזינים לבקשות בשתי היציאות 80 ו-443. יציאה 80 היא לבקשות HTTP לא מאובטחות, ו-443 היא ל-HTTPS מאובטח. הדבר עלול ליצור בעיה, מפני שכשאתם מזינים כתובת בסרגל הכתובות ללא קידומת הפרוטוקול https:// - כמו רוב המשתמשים נוטים לעשות זאת, דפדפנים מסוימים יפנו תנועה לגרסת HTTP הלא מאובטחת של אתר, מסיבות קודמות (אם כי לא תמיד זה המצב).

דרך נפוצה לוודא שהמשתמשים לא ניגשים לגרסה לא מאובטחת של אתר היא להגדיר הפניה אוטומטית מסוג HTTP ל-HTTPS לכל הבקשות. זה בהחלט עובד, אבל עכשיו מתחיל שרשרת האירועים הבאה:

  1. השרת מקבל בקשת HTTP.
  2. השרת מנפיק הפניה אוטומטית כדי לעבור למשאב המקביל ב-HTTPS.
  3. השרת חייב לנהל משא ומתן על חיבור מאובטח עם הדפדפן.
  4. התוכן נטען כרגיל.

למרות שהפניות אוטומטיות פועלות בצורה תקינה, ייתכן שהן מוגדרות באופן שגוי בדרכים שעדיין מאפשרות גישה לגרסה הלא מאובטחת של האתר. גם אם הכול מוגדר כמו שצריך, עדיין יש בעיית אבטחה בכך שהמשתמש עדיין יתחבר באמצעות HTTP לא מאובטח במהלך שלב ההפניה האוטומטית, מה שחושף את המשתמשים לאפשרות של מתקפות מסוכנות מסוג אדם בתווך.

כניסה ל-HSTS

תמיכה בדפדפן

  • Chrome: 4.
  • קצה: 12.
  • Firefox: 4.
  • Safari: 7.

מקור

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

הפניה אוטומטית מסוג 307 מ-HTTP ל-HTTPS, שמופעלת על ידי כותרת HSTS. ההפניה האוטומטית מסוג 307 נמשכת רק 2 אלפיות השנייה.

בדומה לתחביר להוראת max-age של Cache-Control, כותרת HSTS מציינת הוראת max-age. ההוראה הזו מקבלת ערך בשניות שמציין כמה זמן המדיניות בתוקף:

Strict-Transport-Security: max-age=3600

בדוגמה שלמעלה, המדיניות אמורה להיכנס לתוקף למשך שעה בלבד.

פריסת HSTS

החיסרון העיקרי של פריסת HSTS הוא אם אתם לא מוכנים להתייחס למקור שלכם כמאובטח לחלוטין. נניח שיש כמה תת-דומיינים שמהם אתם מציגים משאבים, אבל יכול להיות שלא כולם מאובטחים. בתרחיש הזה, כותרת HSTS עלולה לגרום לשיבושים באתר שלכם.

ה-BBC נקטו גישה נכונה לפריסת HSTS. כפי שניל קרייג ציין בציוץ שלו, הערך הראשוני שהוגדר ל-bc.com היה max-age=10.

בגישה הזו המדיניות הייתה בתוקף בהתחלה למשך עשר שניות בלבד. אין לכך הרבה תועלת, אבל הרעיון הוא לבדוק אם יש בכלל בעיות בהחלת HSTS. עם הזמן אפשר להגדיל את המדיניות בהדרגה ולבדוק אם יש בעיות. נכון למועד הכתיבה, bbc.com מציינת מדיניות HSTS של max-age=86400, והיא תגדל כמעט בהחלט עם הזמן.

כשפורסים HSTS, לא כדאי לצאת מהשער עם ערך max-age ארוך. אתם עלולים למצוא את עצמכם מתערבבים פתאום כדי לפתור בעיות בזמן שהמשתמשים חווים בעיות. מתחילים בקטן ובהדרגה עם הזמן! כשאתם בטוחים שהכול בסדר, תוכלו להגדיר את ההוראה max-age לתקופת זמן ארוכה הרבה יותר. מומלץ להגדיר את max-age לשנה או לשנתיים אחרי ההשקה המלאה.

נהנים מניווט ראשוני מהיר ובטוח יותר עם רשימת הטעינה מראש של HSTS

מדיניות HSTS נכנסת לתוקף רק לאחר הביקור הראשון באתר, כך שהיתרונות אינם קיימים בביקור הראשון באתר. לשם כך עדיין תידרש ההפניה האוטומטית הלא מאובטחת. עם זאת, אתם יכולים לטעון מראש את מדיניות ה-HSTS על ידי שליחת האתר לרשימת הטעינה מראש של HSTS, שהיא רשימה בתוך הקוד של אתרים שידועים לדפדפן שהם רק HTTPS. כשהאתר מופיע ברשימת הטעינה מראש, הביקור הראשון מוגן גם הוא, וההפניה מחדש של HTTP ל-HTTPS תתבצע באופן מיידי.

נסו בעצמכם

אם ל-BBC יש אפשרות לבצע בדיקה של HSTS, יש סיכוי טוב לעשות זאת גם באתר שלך. צריך לבחון את האתר. אם רוצים לשפר את האתר, כדאי להוסיף את האפשרות לרשימת הטעינה מראש של HSTS אחרי שמוודאים שאין באגים שיעניקו למשתמשים חוויה בטוחה יותר ומהירה יותר.