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

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

כברירת מחדל אין משאבים נגישים לאינטרנט, כי זה מאפשר לאתר זדוני לטביעת אצבע של תוספים שמשתמש התקין או לנצל נקודות חולשה (לדוגמה, באגי 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().

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

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

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

דוגמה

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