הגבלת השיתוף של מודול Wasm לערך same-origin

שיתוף מודול WebAssembly בין סביבות באותו אתר יוגבל רק לאותו מקור.

שיתוף מודול WebAssembly (Wasm) בין סביבות באותו אתר אבל ממקורות שונים יהיה הוצא משימוש כדי לאפשר אשכולות סוכנים להיות בהיקף של מקורות. מפתחים שמשתמשים במודולים של Wasm חייב להבטיח ליצור את המודולים האלה באותו מקור כדי להמשיך ולהשתמש בהם אחרי Chrome 95.

מהם מודולים של Wasm ואיך הם פועלים

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

בקוד לדוגמה הבא, מודול Wasm שיובא שותף https://iframe.site.example עם https://main.site.example באמצעות postMessage(). שימו לב שהדומיינים האלה הם אותו אתר אבל חוצה-מקורות.

מודול Wasm ב-https://iframe.site.example:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

החל מגרסה 95 של Chrome, השולח והנמען חייבים להיות באותו מקור. לחשבון את המקרה שלמעלה, https://iframe.site.example צריך להיות https://main.site.example או להיפך.

למה צריך את זה

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

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

  • (Chrome בלבד) כבר אי אפשר לשלוח SharedArrayBuffer או WebAssembly.Memory אובייקטים לדפים אחרים ממקורות שונים באותו אתר. הפורמט הזה כבר קיים החל מגרסה 92 של Chrome.
  • אין לך יותר אפשרות לשלוח WebAssembly.Module אובייקטים לדפים אחרים ממקורות שונים באותו אתר דרך postMessage(). השינוי הזה מוסבר בפירוט בהמשך.
  • אין לך יותר אפשרות להגדיר document.domain זאת תכונה מדור קודם שבדרך כלל מאפשרת לדפים ממקורות שונים באותו אתר ניגשים באופן סינכרוני ל-DOM של השני, אבל באשכולות סוכנים המשויכים למקור, מושבתת.

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

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

השלבים הבאים ומשאבים

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

צילום: Markus Winkler על ביטול הפתיחה