Manifest - Risorse accessibili dal web

Le risorse accessibili dal web sono file all'interno di un'estensione a cui è possibile accedere da pagine web o da altri estensioni. In genere le estensioni utilizzano questa funzionalità per esporre immagini o altri asset che devono essere caricati nelle pagine web, ma qualsiasi asset incluso nel bundle di un'estensione può essere reso accessibile al web.

Per impostazione predefinita nessuna risorsa è accessibile dal web, poiché ciò consente a un sito web dannoso di applicare le impronte delle estensioni installate da un utente oppure sfruttare le vulnerabilità (ad esempio i bug XSS) nelle estensioni installate. Solo pagine o script caricati dall'origine di un'estensione possono accedere alle risorse dell'estensione.

Dichiarazione del file manifest

Utilizza la proprietà manifest web_accessible_resources per dichiarare quali risorse sono esposte e a quali origini. Questa proprietà è un array di oggetti che dichiara le regole di accesso alle risorse. Ogni oggetto mappa un array di risorse di estensione a un array di URL e/o ID estensione che possono accedere a queste risorse.

{
  ...
  "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
    }
  ],
  ...
}

Ogni oggetto nell'array contiene i seguenti elementi:

"resources"
Un array di stringhe, ciascuna contenente un percorso relativo a una determinata risorsa dalla directory principale dell'estensione. Le risorse possono contenere asterischi (*) per le corrispondenze con caratteri jolly. Ad esempio, "/images/*" espone tutto ciò che si trova nella directory images/ dell'estensione in modo ricorsivo, mentre "*.png" espone tutti i file PNG.
"matches"
Un array di stringhe, ciascuna contenente un pattern di corrispondenza che specifica i siti che possono accedere a questo insieme di risorse. Per le corrispondenze degli URL viene utilizzata solo l'origine. Le origini includono la corrispondenza dei sottodomini. Google Chrome emette un errore "Pattern di corrispondenza non valido" se il pattern ha un percorso diverso da "/*".
"extension_ids"
Un array di stringhe, ciascuna contenente l'ID di un'estensione che può accedere alle risorse.
"use_dynamic_url"
Se true, consente l'accesso alle risorse solo tramite un ID dinamico. Viene generato un ID dinamico per sessione. Ciò significa che l'estensione viene rigenerata quando il browser si riavvia o l'estensione si ricarica.

Ogni elemento deve includere un elemento "resources" e un elemento "matches" o "extension_ids". Viene stabilita una mappatura che espone le risorse specificate alle pagine web corrispondenti al pattern o alle estensioni con ID corrispondenti. L'elemento "use_dynamic_url" è facoltativo.

Le risorse sono disponibili in una pagina web tramite l'URLchrome-extension://[PACKAGE ID]/[PATH], che può essere generato con il metodo runtime.getURL(). Le risorse vengono pubblicate con intestazioni CORS appropriate, in modo che siano disponibili tramite fetch().

La navigazione da un'origine web a una risorsa dell'estensione è bloccata, a meno che la risorsa non sia elencata come accessibile tramite il web. Nota questi casi angolo:

  • Quando un'estensione utilizza l'API webRequest per reindirizzare un utente a una risorsa non accessibile dal web, viene bloccata anche una richiesta di questo tipo.
  • Quanto sopra vale anche se la risorsa non accessibile dal web è di proprietà dell'utente che ha eseguito il reindirizzamento .
  • La navigazione è bloccata in modalità di navigazione in incognito, a meno che il valore del campo "incognito" non sia impostato su "split".

Non è necessario consentire gli script dei contenuti stessi.

Esempio

L'esempio di risorse accessibili dal web mostra l'utilizzo di questo elemento in un'estensione funzionante.