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

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

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

הצהרת מניפסט

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

{
  ...
  "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/*" ],
      "use_dynamic_url": true
    }
  ],
  ...
}

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

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

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

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

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

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

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

דוגמה

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