תיקון תוכן מעורב

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

במדריך הזה נדגים שיטות וכלים לתיקון בעיות קיימות של תוכן מעורב ולמניעת בעיות חדשות.

כשנכנסים לדף HTTPS ב-Google Chrome, הדפדפן מתריע על תוכן מעורב באמצעות שגיאות ואזהרות במסוף JavaScript.

במאמר מהו תוכן מעורב? תוכלו למצוא כמה דוגמאות ולראות איך הבעיות מדווחות ב-Chrome DevTools.

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

כלי הפיתוח של Chrome שמוצגות בו האזהרות שמופיעות כשמתבצעת שדרוג של תוכן מעורב שזוהה

תוכן מעורב פעיל נחסם ומוצגת אזהרה.

כלי פיתוח ל-Chrome שמציגים את האזהרות שמופיעות כשתוכן מעורב פעיל חסום

אם מוצאים אזהרות כאלה לגבי http:// כתובות URL באתר, צריך לתקן אותן במקור של האתר. מומלץ ליצור רשימה של כתובות ה-URL האלה, יחד עם הדף שבו מצאתם אותן, כדי להשתמש בה כשתקנו אותן.

איתור תוכן מעורב באתר

אפשר לחפש תוכן מעורב ישירות בקוד המקור. מחפשים את http:// במקור ומחפשים תגים שכוללים מאפיינים של כתובות URL מסוג HTTP. חשוב לזכור שלרוב, העובדה שמוצג הערך http:// במאפיין href של תגי עוגן (<a>) היא לא בעיה של תוכן מעורב, למעט כמה חריגים משמעותיים שיוסברו בהמשך.

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

תיקון תוכן מעורב

אחרי שמוצאים תוכן מעורב במקור של האתר, אפשר לפעול לפי השלבים הבאים כדי לתקן את הבעיה.

אם מופיעה הודעה במסוף שלפיה בקשת משאב שודרגה באופן אוטומטי מ-HTTP ל-HTTPS, תוכלו לשנות ללא חשש את כתובת ה-URL http:// של המשאב בקוד ל-https://. כדי לבדוק אם משאב מסוים זמין באופן מאובטח, משנים את http:// ל-https:// בסרגל כתובות ה-URL בדפדפן, ומנסים לפתוח את כתובת ה-URL בכרטיסייה בדפדפן.

אם המשאב לא זמין דרך https://, כדאי לשקול אחת מהאפשרויות הבאות:

  • כוללים את המשאב ממארח אחר, אם יש מארח כזה.
  • להוריד את התוכן ולתת לו אירוח ישירות באתר שלכם, אם יש לכם הרשאה חוקית לעשות זאת.
  • להחריג את המשאב מהאתר לגמרי.

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

היזהרו משימוש לא סטנדרטי בתגים

היזהרו משימוש לא סטנדרטי בתגים באתר. לדוגמה, כתובות URL של תגי עוגן (<a>) לא גורמות לשגיאות של תוכן מעורב, כי הן גורמות לדפדפן לנווט לדף חדש. לכן בדרך כלל אין צורך לתקן אותן. עם זאת, חלק מהסקריפטים של גלריות תמונות מבטלים את הפונקציונליות של התג <a> ומטעינים את משאב ה-HTTP שצוין במאפיין href בתצוגת lightbox בדף, וכתוצאה מכך נוצרת בעיה של תוכן מעורב.

טיפול בתוכן מעורב בקנה מידה נרחב

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

מדיניות אבטחת תוכן

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

בכל פעם שמשתמש מבקר בדף באתר, הדפדפן שלו שולח אל https://example.com/reportingEndpoint דוחות בפורמט JSON לגבי כל מה שמפר את המדיניות בנושא אבטחת תוכן. במקרה כזה, בכל פעם שמשאב משנה נטען דרך HTTP, נשלחת הודעה. הדוחות האלה כוללים את כתובת ה-URL של הדף שבו התרחשה הפרת המדיניות ואת כתובת ה-URL של המשאב המשני שהפר את המדיניות. אם הגדרתם שנקודת הקצה של הדיווח תרשום את הדוחות האלה, תוכלו לעקוב אחרי התוכן המעורב באתר בלי להיכנס לכל אחד מהדפים בעצמכם.

יש שתי נקודות שחשוב לשים לב אליהן:

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

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

חלופות לדיווח באמצעות CSP

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

שדרוג בקשות לא מאובטחות

תמיכה בדפדפן

  • Chrome: 44.
  • Edge:‏ 17.
  • Firefox: 48.
  • Safari: 10.1.

מקור

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

ההוראה upgrade-insecure-requests של מדיניות האבטחה תובעת מהדפדפן לשדרג כתובות 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>, כדי לוודא שכל הדף מוגן.