כותרות אבטחה ב-HTTP — מה כל אחת עושה, ומה כדאי להפעיל
ארבע כותרות נותנות כמעט את כל התועלת: HSTS, X-Content-Type-Options, X-Frame-Options ו-Referrer-Policy. CSP חזקה יותר מכולן אבל גם מסוכנת להפעיל בלי בדיקה.
כותרות אבטחה הן הוראות שהשרת שולח לדפדפן יחד עם כל עמוד: «אל תיתן להטמיע אותי במסגרת», «אל תנחש סוגי קבצים», «תמיד תדבר איתי מוצפן». הן לא עוצרות תוקף שכבר נכנס לשרת, אבל הן מנטרלות משפחה שלמה של התקפות שמכוונות למבקרים שלכם.
בדיקת כותרות HTTPבדקו אילו כותרות האתר שלכם מחזיר כרגע.לבדיקה חינםStrict-Transport-Security (HSTS)
אומרת לדפדפן: מהיום והלאה, פנה לאתר הזה רק ב-HTTPS, גם אם המשתמש הקליד http. זה מנטרל את חלון ההזדמנות שבו מישהו ברשת ציבורית יכול ליירט את הבקשה הראשונה ולהפנות לאתר מזויף.
Strict-Transport-Security: max-age=31536000; includeSubDomainsלפני הפעלה ודאו שכל תת-הדומיינים שלכם באמת תומכים ב-HTTPS. עם includeSubDomains, תת-דומיין בלי תעודה תקפה פשוט יפסיק להיפתח, והדפדפן יזכור את זה לשנה.
X-Content-Type-Options
ערך יחיד, nosniff, ואין סיבה לא להפעיל אותו. הוא אוסר על הדפדפן לנחש את סוג הקובץ בניגוד למה שהשרת הצהיר. בלעדיו, קובץ שהועלה כתמונה ובעצם מכיל קוד עלול להתפרש כקוד.
X-Content-Type-Options: nosniffX-Frame-Options ו-frame-ancestors
מונעות clickjacking — הטמעה של האתר שלכם בתוך מסגרת באתר זר, עם שכבה שקופה מעליו, כדי לגרום למשתמש ללחוץ על משהו שהוא לא מתכוון ללחוץ עליו.
X-Frame-Options: SAMEORIGINהתקן המודרני הוא ההנחיה frame-ancestors בתוך CSP, אבל X-Frame-Options עדיין נתמכת בכל מקום ולא מזיקה לצידה.
Referrer-Policy
קובעת כמה מידע על הכתובת הנוכחית נשלח כשמבקר עובר לאתר אחר. ברירת המחדל עלולה לחשוף כתובות פנימיות עם פרמטרים. ההגדרה המאוזנת:
Referrer-Policy: strict-origin-when-cross-originהיא שולחת את הכתובת המלאה בתוך האתר, רק את שם הדומיין כשעוברים החוצה, וכלום כשעוברים מ-HTTPS ל-HTTP.
Content-Security-Policy — החזקה והמסוכנת
CSP מגדירה בדיוק מאילו מקורות מותר לטעון סקריפטים, סגנונות, תמונות ופונטים. כשהיא מוגדרת נכון היא מנטרלת כמעט לגמרי הזרקת סקריפטים. הבעיה: אתר WordPress טיפוסי טוען קוד מעשרה מקורות שונים — פיקסלים, גופנים, צ׳אטים, מפות — וכל אחד שלא נכלל במדיניות פשוט יפסיק לעבוד.
- התחילו במצב דיווח בלבד: Content-Security-Policy-Report-Only.
- אספו דיווחים כמה ימים וראו מה באמת נטען באתר.
- בנו מדיניות שמכסה את הרשימה הזו, והפעילו אותה רק אחרי שהדיווחים שקטים.
אם אין לכם דרך לאסוף דיווחים ולבדוק, עדיף CSP חלקית שמכסה frame-ancestors ו-upgrade-insecure-requests מאשר מדיניות שאפתנית ששוברת את הצ׳אט באתר ואף אחד לא שם לב שבוע.
Permissions-Policy
מבטלת יכולות דפדפן שהאתר שלכם ממילא לא צריך — מצלמה, מיקרופון, מיקום. זה מצמצם את הנזק אם הוזרק לאתר סקריפט זר.
Permissions-Policy: camera=(), microphone=(), geolocation=()סדר הפעלה מומלץ
| שלב | מה מפעילים |
|---|---|
| מיד, בלי סיכון | X-Content-Type-Options, Referrer-Policy, X-Frame-Options, Permissions-Policy |
| אחרי בדיקת תת-דומיינים | HSTS עם max-age קצר, ואז הארכה לשנה |
| בתהליך מדוד | CSP במצב דיווח, ואז אכיפה |
באתרים שמנוהלים אצלנו ארבע הכותרות הראשונות מוגדרות ברמת השרת כברירת מחדל, וסריקת האבטחה מסמנת בדיוק אילו כותרות חסרות ומה להוסיף — כולל HSTS, שהיא הממצא הנפוץ ביותר באתרים שמגיעים אלינו.
אבטחת WordPress ב-Siteyvo
כל מה שתואר כאן קורה במערכת אוטומטית, על כל אתר, בלי שתצטרכו לזכור.
תקנו עם Siteyvo