הגבלת השיתוף של מודול 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 ב-UnFlood