iframe ללא פרטי כניסה: הטמעה קלה של מסגרות iframe בסביבות COEP

Arthur Sonzogni
Arthur Sonzogni

מפתחים שמשתמשים ב-COEP יכולים כעת להטמיע מסגרות iframe של צד שלישי שלא משתמשים ב-COEP בעצמם.

הגדרת Iframe ללא פרטי כניסה מופעלת כברירת מחדל בגרסה 110 של Chrome. הוא פותר את הבעיות הנפוצות ביותר שמפתחי תלונות עובדים עם Cross-Origin-embedder-Policy (COEP): הטמעת מסגרות iframe של צד שלישי שלא מגדירות COEP.

למה אנחנו צריכים COEP

חלק מממשקי ה-API לאינטרנט מגבירים את הסיכון להתקפות ערוץ צדדי כמו Spectre. כדי לצמצם את הסיכון, דפדפנים מציעים סביבה מבודדת שמבוססת על הסכמה שנקראת בידוד בין מקורות. הסביבה הזו מחייבת פריסת COEP. בידוד בין מקורות מאפשר לאתרים להשתמש בתכונות עם הרשאות, כולל SharedArrayBuffer, performance.measureUserAgentSpecificMemory() וטיימרים ברמת דיוק גבוהה עם רזולוציה טובה יותר.

כדי להפעיל בידוד בין מקורות, אתרים חייבים לשלוח את כותרות ה-HTTP הבאות:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

אפשר להשתמש גם בפונקציה COEP:credentialsless כחלופה ל-require-corp. פרטים נוספים זמינים במסמכי התיעוד.

האתגרים בהפעלת COEP

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

מסגרות ללא פרטי כניסה כדי להציל

אנחנו משיקים את <iframe credentialless> כדי לעזור בהטמעת מסגרות iframe של צד שלישי שלא מגדירות COEP. על ידי הוספת המאפיין credentialless לרכיב <iframe>, ה-iframe נטען מהקשר ריק אחר. באופן ספציפי, הוא נטען ללא קובצי cookie. כך ניתן להסיר את הגבלת ה-COEP.

דוגמה:

<iframe credentialless src="https://example.com">

ה-iframe הזה נוצר בהקשר זמני חדש ואין לו גישה לקובצי ה-cookie שמשויכים לאתר ברמה העליונה. במקום זאת, היא מתחילה בצנצנת עוגיות ריקה. באופן דומה, ממשקי API לאחסון כמו LocalStorage , CacheStorage , IndexedDB וכן הלאה, טוענים ומאחסנים נתונים במחיצה הזמנית החדשה. מחיצה מוגדרת גם למסמך הנוכחי ברמה העליונה וגם למקור ה-iframe. כל נפח האחסון הזה מתפנה אחרי הסרת המסמך ברמה העליונה.

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

הדגמה (דמו)

בקישור הבא אפשר לראות הדגמה של iframe ללא פרטי כניסה.

שאלות נפוצות

האם דפדפנים אחרים ישתמשו בתכונה הזו?

האם <iframe> מקונן בתוך <iframe credentialless> ללא פרטי כניסה?

כן. היא עוברת בירושה. ברגע ש-iframe הוא ללא פרטי כניסה, ההגדרה הזו חלה על כל ה-iframes בכל עץ המשנה, גם בלי המאפיין credentialless.

האם נוצרים גם חלונות קופצים מ-<iframe credentialless> ללא פרטי כניסה?

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

איך מזהים שהמסמך הוטמע ב-iframe ללא פרטי כניסה?

window.credentialless מוגדר כ-TRUE ב-iframe ללא פרטי כניסה, ו-FALSE אם לא. הערך שלו הוא undefined בדפדפן אינטרנט שלא תומך ב-<iframe credentialless>.

משאבים