תמיכה ב-HTTPS באתר היא שלב חשוב בהגנה על האתר ועל המשתמשים מפני התקפות, אבל תוכן מעורב עלול להפוך את ההגנה הזו ללא יעילה. דפדפנים יחסמו יותר ויותר תוכן מעורב לא מאובטח, כמו שמוסבר במאמר מהו תוכן מעורב?
במדריך הזה נציג טכניקות וכלים לתיקון בעיות קיימות של תוכן מעורב ולמניעת בעיות חדשות.
איך מוצאים תוכן מעורב על ידי כניסה לאתר
כשמבקרים בדף HTTPS ב-Google Chrome, הדפדפן מתריע על תוכן מעורב כשגיאות ואזהרות במסוף JavaScript.
במאמר מהו תוכן מעורב? אפשר למצוא כמה דוגמאות ולראות איך הבעיות מדווחות בכלי הפיתוח ל-Chrome.
בדוגמה של תוכן מעורב פסיבי יוצגו האזהרות הבאות.
אם הדפדפן מצליח למצוא את התוכן בכתובת URL מסוג https, הוא משדרג אותו באופן אוטומטי ומציג הודעה.
תוכן מעורב פעיל נחסם ומוצגת אזהרה.
אם מופיעות אזהרות כאלה לגבי כתובות URL של http:// באתר, צריך לתקן אותן במקור של האתר.
כדאי ליצור רשימה של כתובות ה-URL האלה, יחד עם הדף שבו מצאתם אותן, כדי להשתמש בה כשמתקנים אותן.
איך מוצאים תוכן מעורב באתר
אפשר לחפש תוכן מעורב ישירות בקוד המקור.
מחפשים את התו http:// במקור ומוצאים תגים שכוללים מאפיינים של כתובות URL מסוג HTTP.
שימו לב: בדרך כלל, אם יש http:// במאפיין href של תגי עוגן (<a>), זו לא בעיה של תוכן מעורב. עם זאת, יש כמה יוצאים מן הכלל שנדון בהם בהמשך.
אם האתר שלכם מתפרסם באמצעות מערכת ניהול תוכן, יכול להיות שקישורים לכתובות URL לא מאובטחות מוכנסים כשדפים מתפרסמים. לדוגמה, יכול להיות שתמונות יכללו כתובת URL מלאה ולא נתיב יחסי. תצטרכו למצוא ולתקן את הבעיות האלה בתוכן של מערכת ניהול התוכן.
תיקון תוכן מעורב
אחרי שמאתרים תוכן מעורב במקור של האתר, אפשר לבצע את השלבים הבאים כדי לפתור את הבעיה.
אם מופיעה הודעה במסוף שלפיה בקשת משאב שודרגה אוטומטית מ-HTTP ל-HTTPS, אפשר לשנות בבטחה את כתובת ה-URL של המשאב בקוד מ-http:// ל-https://.
אפשר גם לבדוק אם משאב זמין בצורה מאובטחת על ידי שינוי http:// ל-https:// בסרגל כתובת ה-URL בדפדפן וניסיון לפתוח את כתובת ה-URL בכרטיסיית דפדפן.
אם המשאב לא זמין דרך https://, כדאי לשקול אחת מהאפשרויות הבאות:
- אם יש משאב זמין במארח אחר, כוללים אותו.
- אם יש לך אישור חוקי לעשות זאת, אפשר להוריד את התוכן ולארח אותו ישירות באתר שלך.
- להחריג את המשאב מהאתר לגמרי.
אחרי שמתקנים את הבעיה, צופים בדף שבו השגיאה הופיעה במקור ומוודאים שהיא כבר לא מופיעה.
שימו לב לשימוש לא סטנדרטי בתגים
שימו לב לשימוש בתגים באתר שלא עומד בתקנים.
לדוגמה, כתובות URL של תגי עוגן (<a>) לא גורמות לשגיאות של תוכן מעורב, כי הן גורמות לדפדפן לעבור לדף חדש.
המשמעות היא שבדרך כלל לא צריך לתקן אותם.
עם זאת, יש סקריפטים של גלריות תמונות שמבטלים את הפונקציונליות של התג <a>
ומטעינים את משאב ה-HTTP שצוין במאפיין href לתצוגה של חלון קופץ בדף, וכך נוצרת בעיה של תוכן מעורב.
טיפול בתוכן מעורב בהיקף גדול
השלבים הידניים שלמעלה מתאימים לאתרים קטנים יותר, אבל כשמדובר באתרים גדולים או באתרים עם הרבה צוותי פיתוח נפרדים, קשה לעקוב אחרי כל התוכן שנטען. כדי לעזור לכם במשימה הזו, אתם יכולים להשתמש במדיניות אבטחת תוכן כדי להנחות את הדפדפן להודיע לכם על תוכן מעורב ולוודא שהדפים שלכם אף פעם לא טוענים משאבים לא מאובטחים באופן לא צפוי.
Content Security Policy
Content Security Policy (CSP) היא תכונה רב-תכליתית בדפדפן שמאפשרת לכם לנהל תוכן מעורב בהיקף נרחב. אפשר להשתמש במנגנון הדיווח של CSP כדי לעקוב אחרי תוכן מעורב באתר, ולספק מדיניות אכיפה כדי להגן על המשתמשים על ידי שדרוג או חסימה של תוכן מעורב.
כדי להפעיל את התכונות האלה בדף, צריך לכלול את הכותרת Content-Security-Policy או Content-Security-Policy-Report-Only בתגובה שנשלחת מהשרת.
בנוסף, אפשר להגדיר Content-Security-Policy
(אבל לא Content-Security-Policy-Report-Only) באמצעות תג <meta> בקטע <head> של הדף.
איתור תוכן מעורב באמצעות מדיניות אבטחת תוכן
אפשר להשתמש במדיניות אבטחת תוכן כדי לאסוף דוחות על תוכן מעורב באתר.
כדי להפעיל את התכונה הזו, צריך להגדיר את ההנחיה Content-Security-Policy-Report-Only על ידי הוספתה ככותרת תגובה לאתר.
כותרת התגובה:
Content-Security-Policy-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/reportingEndpoint
בכל פעם שמשתמש נכנס לדף באתר, הדפדפן שלו שולח דוחות בפורמט JSON לגבי כל דבר שמפר את מדיניות אבטחת התוכן אל https://example.com/reportingEndpoint.
במקרה כזה, בכל פעם שמשאב משני נטען דרך HTTP, נשלח דוח.
הדוחות האלה כוללים את כתובת ה-URL של הדף שבו התרחשה הפרת המדיניות ואת כתובת ה-URL של משאב המשנה שהפר את המדיניות.
אם תגדירו את נקודת הקצה של הדוחות כך שיתועדו בה הדוחות האלה, תוכלו לעקוב אחרי התוכן המעורב באתר בלי להיכנס לכל דף בעצמכם.
יש שני חריגים:
- המשתמשים צריכים להיכנס לדף שלכם בדפדפן שמבין את כותרת ה-CSP. זה נכון לגבי רוב הדפדפנים המודרניים.
- אתם מקבלים דוחות רק על דפים שהמשתמשים שלכם ביקרו בהם. לכן, אם יש לכם דפים שלא מובילים אליהם הרבה גולשים, יכול להיות שיעבור זמן מה עד שתקבלו דוחות לגבי האתר כולו.
במדריך בנושא מדיניות אבטחת תוכן יש מידע נוסף ודוגמה לנקודת קצה.
חלופות לדיווח באמצעות CSP
אם האתר שלכם מתארח בפלטפורמה כמו Blogger, יכול להיות שלא תהיה לכם גישה לשינוי הכותרות ולהוספת CSP. אפשרות חלופית היא להשתמש בסורק אתרים כדי למצוא בעיות באתר, כמו HTTPSChecker או Mixed Content Scan.
שדרוג בקשות לא מאובטחות
הדפדפנים מתחילים לשדרג ולחסום בקשות לא מאובטחות. אפשר להשתמש בהנחיות של CSP כדי לאלץ שדרוג אוטומטי או חסימה של הנכסים האלה.
ההוראה upgrade-insecure-requests של CSP מורה לדפדפן לשדרג כתובות URL לא מאובטחות לפני שליחת בקשות לרשת.
לדוגמה, אם דף מכיל תג תמונה עם כתובת URL מסוג HTTP כמו
<img src="http://example.com/image.jpg">
במקום זאת, הדפדפן שולח בקשה מאובטחת ל-https://example.com/image.jpg, וכך מונע מהמשתמש תוכן מעורב.
כדי להפעיל את ההתנהגות הזו, שולחים כותרת Content-Security-Policy עם ההנחיה הבאה:
Content-Security-Policy: upgrade-insecure-requests
או על ידי הטמעת אותה הנחיה בשורה בקטע <head> של המסמך באמצעות רכיב <meta>:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
בדומה לשדרוג אוטומטי בדפדפן, אם המשאב לא זמין ב-HTTPS, הבקשה המשודרגת נכשלת והמשאב לא נטען.
כך שומרים על אבטחת הדף. ההנחיה upgrade-insecure-requests תפעל מעבר לשדרוג אוטומטי של הדפדפן, ותנסה לשדרג בקשות שהדפדפן לא משדרג כרגע.
ההוראה upgrade-insecure-requests מועברת אל מסמכי <iframe>, וכך כל הדף מוגן.