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

למה המנהרה לא יכולה לכסות משאב משנה

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

דפדפנים בני זמננו מחלקים את הבקשות האלה לשתי קבוצות ומתייחסים אליהן אחרת. סקריפטים, גיליונות עיצוב, iframes וקריאות דרך fetch, XMLHttpRequest או WebSocket נדחים מיד, בלי ניסיון שדרוג מוקדם. תמונות, שמע ווידאו נכתבים מחדש ל-https:// ומבוקשים שוב, והטעינה נזנחת כששליפה מאובטחת זו נכשלת. כתובת משאב משנה שהמארח שלה הוא כתובת IP חשופה פטורה משדרוג, ולכן תמונת HTTP במארח IP נשארת חסומה במקום שתתוקן בשקט. החלוקה הזו, כולל אותו פטור בצד שניתן לשדרג, מתועדת ב מדריך של Mozilla לתוכן מעורב. Chrome מיישם דחייה דומה על הורדות לא מאובטחות שמתחילות מעמוד מאובטח, ולכן קישור PDF יכול למות בעוד העמוד שסביבו נראה שלם.

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

קבע למי שייכת ההפניה הלא מאובטחת

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

מאין מגיעה הכתובתמי יכול לתקן אותהצעד ראשון
מקודד קשיח בתבנית או בחלק שאתה פורסאתההחלף אותו בצורת https:// ואז רוקן את המטמון
הוזרק על ידי מנהל תגיות או חבילת ספקהספק, עם הכרטיס שלךשלח את הכתובת המדויקת, את סוג הבקשה ואת שורת הקונסולה
מוגש רק בפורט 80 בלי מאזין TLSבעל המארחבקש TLS, הצב משהו שאתה שולט בו לפניו, או וותר עליו

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

תקן את ההפניה ולא את הגדרת הדפדפן

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

curl -sSI https://cdn.example.org/vendor.js | head -n 1
curl -sS -o /dev/null -w '%{http_code} %{url_effective}\n' -L https://cdn.example.org/vendor.js

שתי בקרות מסייעות שוות הכרה, ואף אחת מהן אינה מחליפה את התיקון. כותרת Content-Security-Policy עם upgrade-insecure-requests מאלצת את הדפדפן לכתוב מחדש כתובות של משאבי משנה http לפני שהן עוזבות את העמוד, מה שתופס הפניות ישנות שעוד לא מצאת. הבקשה שנכתבה מחדש עדיין נכשלת כשהמארח המיועד אינו מגיש HTTPS, ולכן הכותרת רק משנה איזו כתובת הדפדפן מנסה. HSTS פועל לפי מארח, כלומר מדיניות בדומיין שלך לא עושה דבר ל-CDN של צד שלישי שמעולם לא שלח את הכותרת. אחרי עריכת תבנית רוקן את מטמון העמוד וחפש את שם המארח הישן ב-HTML המוצג, מפני שאותה כתובת יכולה להגיע גם דרך חלק, מחרוזת תרגום או שדה מסד נתונים.

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

אמת את העמוד עם הקונסולה ולוח הרשת

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

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

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

מאמרים קשורים