מניפסט – ארגז חול

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

הגדרה של אוסף דפים של אפליקציה או תוסף שיוצגו באוריגין ייחודי בסביבת ארגז חול, ואפשרות להגדיר Content Security Policy לשימוש בדפים האלה. להיות בסביבת ארגז חול יש שתי השלכות:

  1. לדף בסביבת ארגז חול לא תהיה גישה לממשקי API של תוספים או אפליקציות, או גישה ישירה לדפים שלא נמצאים בסביבת ארגז חול (אבל הוא יכול לתקשר איתם באמצעות postMessage()).
  2. דף שמופעל בסביבת ארגז חול לא כפוף לContent Security Policy (CSP) שבה נעשה שימוש בשאר האפליקציה או התוסף (יש לו ערך CSP נפרד משלו). כלומר, היא יכולה למשל להשתמש בסקריפט מוטבע וב-eval.

    לדוגמה, כך מציינים ששני דפים של תוסף יוצגו בארגז חול עם CSP מותאם אישית:

    {
      ...
      "sandbox": {
        "pages": [
          "page1.html",
          "directory/page2.html"
        ]
        // content_security_policy is optional.
        "content_security_policy":
            "sandbox allow-scripts; script-src 'self'"
      ],
      ...
    }
    

    אם לא מציינים ערך, ערך ברירת המחדל הוא content_security_policy. sandbox allow-scripts allow-forms allow-popups allow-modals; script-src 'self' 'unsafe-inline' 'unsafe-eval'; child-src 'self'; אפשר לציין את ערך ה-CSP כדי להגביל עוד יותר את ארגז החול, אבל הוא חייב לכלול את ההנחיה sandbox ואסור לו לכלול את הטוקן allow-same-origin (אפשר לעיין במפרט של HTML5 כדי לראות אילו טוקנים אפשריים של ארגז החול קיימים). בנוסף, יכול להיות שה-CSP שציינתם לא יאפשר טעינה של תוכן אינטרנט חיצוני בדפים שמופעל בהם ארגז חול.

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

"שימוש ב-eval בתוספים ל-Chrome. במאמרSafely."‎מוסבר בפירוט איך להטמיע תהליך עבודה של ארגז חול שמאפשר שימוש בספריות, שאחרת היו גורמות לבעיות בהרצה במסגרת Content Security Policy של התוסף.

אפשר לציין דף בסביבת ארגז חול רק כשמשתמשים ב-manifest_version בגרסה 2 ומעלה.