מפתחים שמשתמשים ב-COEP יכולים עכשיו להטמיע iframes של צד שלישי שלא משתמשים ב-COEP בעצמם.
התכונה 'Iframe ללא פרטי כניסה' מופעלת כברירת מחדל מגרסת Chrome 110 ואילך. הפתרון הזה פותר את התלונה הנפוצה ביותר של מפתחים שעובדים עם 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:credentialless כחלופה ל-require-corp
. פרטים נוספים זמינים במסמכי התיעוד.
אתגרים בהפעלת COEP
בידוד בין מקורות (COEP) משפר את האבטחה של דפי אינטרנט ומאפשר להפעיל תכונות חזקות, אבל הפריסה של COEP קשה. אחת מהאתגרים הגדולים ביותר היא שכל מסגרות ה-iframe שמקורן במקור אחר חייבות לפרוס את COEP ו-CORP. הדפדפן לא יטעים מסגרות Iframe ללא הכותרות האלה.
מסגרת 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 ב-subtree כולו, גם בלי מאפיין credentialless
.
האם חלונות קופצים שנוצרים מ-<iframe credentialless>
הם גם ללא פרטי כניסה?
חלונות קופצים נפתחים כאילו ההגדרה noopener
הוגדרה. הם נוצרים בהקשר רגיל חדש ברמה העליונה, והם לא חסרי פרטי כניסה. הם לא יכולים לתקשר עם ה-iframe ללא פרטי הכניסה.
איך אפשר לזהות שהמסמך מוטמע ב-iframe ללא פרטי כניסה?
הערך של window.credentialless
הוא true בתוך iframe ללא פרטי כניסה, ו-false במקרים אחרים. הערך שלו הוא undefined
בדפדפן אינטרנט שלא תומך ב-<iframe credentialless>
.
משאבים
- איך מבודדים את האתר מ-origin שונים באמצעות COOP ו-COEP
- למה צריך 'מבודד ממקורות שונים' כדי ליהנות מתכונות מתקדמות
- מדריך להפעלת בידוד ממקורות שונים
- עדכוני SharedArrayBuffer ב-Chrome 88 ל-Android וב-Chrome 92 למחשב
- איך טוענים משאבים ממקורות שונים בלי כותרות CORP באמצעות
COEP: credentialless
- IFrame ללא פרטי כניסה – אבטחת אינטרנט | MDN