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

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

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

מהם מודולים של 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 מ-Unsplash