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

Arthur Sonzogni
Arthur Sonzogni

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

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

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

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

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

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

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

בדרך כלל, מסגרות ה-iframe מוצגות על ידי צד שלישי שיכול להיות שלא קל לפרוס אותו ב-COEP.

iframe אנונימי כדי להציל

כאן נכנס לתמונה iframe אנונימי. הוספת המאפיין anonymous לרכיב <iframe> מאפשרת לטעון את ה-iframe ממחיצה אחרת של אחסון זמני, והוא לא כפוף יותר להגבלות של COEP.

דוגמה:

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

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

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

הדגמה (דמו)

אפשר לבדוק iframe אנונימי בכתובת: https://anonymous-iframe.glitch.me/

הרשמה לתקופת ניסיון למקור

כדי לוודא שמסגרות iframe אנונימיות עוזרות למפתחים לאמץ בידוד בין מקורות, אנחנו משיקים אותן ב-Chrome מגרסה 106 עד 108 כגרסת ניסיון למקור.

נרשמים לגרסת המקור לניסיון כדי לאפשר לאתר להשתמש במסגרות iframe אנונימיות:

  1. מבקשים אסימון למקור.
  2. משתמשים באסימון באחת מהדרכים הבאות:
    • ב-HTML: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • בקוד ה-JavaScript: js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • בכותרות ה-HTTP: text Origin-Trial: TOKEN_GOES_HERE
  3. מוסיפים לדף iframe אנונימי: html <iframe anonymous src="https://example.com">

אם יש לכם משוב על התכונה הזו, אתם יכולים לדווח על בעיה במאגר GitHub.

גרסת מקור לניסיון של צד שלישי

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

איך נרשמים לתקופת ניסיון של מקור צד שלישי

שאלות נפוצות

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

האם מסגרות iframe שמוטמעות ב-<iframe anonymous> הן אנונימיות?

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

האם חלונות קופצים שנוצרים מ-<iframe anonymous> הם גם אנונימיים?

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

משאבים