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

תמיכה ב-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

בכל פעם שמשתמשים מבקרים בדף באתר שלכם, הדפדפן שלהם שולח דוחות בפורמט JSON לגבי כל הפרה של מדיניות אבטחת התוכן אל https://example.com/reportingEndpoint. במקרה כזה, בכל פעם שמשאב משנה נטען דרך 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>, כדי לוודא שכל הדף מוגן.