מניפסט – משאבים נגישים לאינטרנט

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

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

הצהרת מניפסט

צריך להשתמש במאפיין המניפסט web_accessible_resources כדי להצהיר אילו משאבים חשופים ולאילו מקורות. הנכס הזה הוא מערך של אובייקטים שמצהירים על כללי הגישה למשאבים. כל אובייקט מפרט מספר משאבי תוספים וצריך לספק ערך לפחות לאחד מהמפתחות matches או extension_ids כדי לציין את המקורות שיכולים לגשת למשאבים האלה.

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
    }
  ],
  ...
}

כל אובייקט במערך מכיל את הרכיבים הבאים:

"resources"
מערך מחרוזות, שכל אחת מהן מכילה נתיב יחסי למשאב נתון מספריית השורש של התוסף. המשאבים עשויים להכיל כוכביות (*) להתאמות לתווים כלליים לחיפוש. לדוגמה, "/images/*" חושף את כל מה שבספריית images/ של התוסף באופן רקורסיבי, ואילו "*.png" חושף את כל קובצי ה-PNG.
"matches"
מערך מחרוזות, שכל אחת מהן מכילה דפוס התאמה שמציין לאילו אתרים יש גישה לקבוצת המשאבים הזו. רק המקור משמש להתאמת כתובות URL. המקורות כוללים התאמה בין תת-דומיינים. Google Chrome פולט את השגיאה "דפוס התאמה לא חוקי" אם לדפוס יש נתיב שאינו '/*'.
"extension_ids"
מערך מחרוזות, שכל אחת מהן מכילה את המזהה של תוסף שיכול לגשת למשאבים.

כל רכיב חייב לכלול רכיב "resources" וגם אלמנט "matches" או "extension_ids". הפעולה הזו יוצרת מיפוי שחושף את המשאבים שצוינו לדפי אינטרנט שתואמים לדפוס או לתוספים עם מזהים תואמים.

משאבים זמינים בדף אינטרנט באמצעות כתובת ה-URL chrome-extension://[PACKAGE ID]/[PATH], ואפשר ליצור אותה באמצעות השיטה runtime.getURL(). המשאבים מוצגים עם כותרות CORS מתאימות, כך שהם זמינים באמצעות fetch().

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

  • כשתוסף משתמש ב-webRequest API כדי להפנות בקשת משאב ציבורית למשאב שלא נגיש באינטרנט, הבקשה הזו נחסמת גם.
  • הפניות אוטומטיות ממשאבים ציבוריים חסומות גם אם המשאב שלא נגיש באינטרנט נמצא בבעלות תוסף ההפניה האוטומטית.
  • הניווט חסום במצב פרטי, אלא אם הערך בשדה "incognito" מוגדר כ-"split".

אין צורך להתיר את השימוש בסקריפטים של תוכן עצמם.

דוגמה

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