Manifiesto: Recursos accesibles en la Web

Los recursos a los que se puede acceder desde la Web son archivos dentro de una extensión a los que se puede acceder desde páginas web y otras extensiones. Por lo general, las extensiones usan esta función para exponer imágenes o algún otro recurso que se debe cargar en páginas web, pero se puede acceder a cualquier recurso incluido en el paquete de una extensión.

De forma predeterminada, no se puede acceder a ningún recurso desde la Web, ya que esto permite que un sitio web malicioso huella de las extensiones que un usuario instaló o explota vulnerabilidades (por ejemplo, errores de XSS) en las extensiones instaladas. Solo las páginas o secuencias de comandos cargadas desde el origen de una extensión pueden acceder a los recursos de esa extensión.

Declaración del manifiesto

Usa la propiedad del manifiesto web_accessible_resources para declarar qué recursos están expuestos y en qué orígenes. Esta propiedad es un array de objetos que declara reglas de acceso a recursos. Cada objeto enumera una cantidad de recursos de extensión y debe proporcionar un valor para al menos una de las claves matches o extension_ids para indicar los orígenes que pueden acceder a estos recursos.

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

Cada objeto del array contiene los siguientes elementos:

"resources"
Es un array de cadenas, cada una con una ruta de acceso relativa a un recurso determinado desde el directorio raíz de la extensión. Los recursos pueden contener asteriscos (*) para coincidencias de comodines. Por ejemplo, "/images/*" expone todo el contenido del directorio images/ de la extensión, de manera recursiva, mientras que "*.png" expone todos los archivos PNG.
"matches"
Es un array de cadenas, cada una con un patrón de coincidencia que especifica qué sitios pueden acceder a este conjunto de recursos. Solo se usa el origen para establecer coincidencias con las URLs. Los orígenes incluyen coincidencias de subdominios. Google Chrome emite un error de "Patrón de coincidencia no válido" si el patrón tiene una ruta distinta de "/*".
"extension_ids"
Es un array de cadenas, cada una con el ID de una extensión que puede acceder a los recursos.

Cada elemento debe incluir un elemento "resources" y un elemento "matches" o "extension_ids". Esto establece una asignación que expone los recursos especificados a las páginas web que coinciden con el patrón o a las extensiones con IDs coincidentes.

Los recursos están disponibles en una página web con la URL chrome-extension://[PACKAGE ID]/[PATH], que se puede generar con el método runtime.getURL(). Los recursos se entregan con los encabezados CORS adecuados, por lo que están disponibles mediante fetch().

Se bloquea la navegación de un origen web a un recurso de extensión, a menos que el recurso aparezca como accesible desde la Web. Observa estos casos límite:

  • Cuando una extensión usa la API de webRequest para redireccionar una solicitud de recurso pública a un recurso al que no se puede acceder desde la Web, esa solicitud también se bloquea.
  • Los redireccionamientos de recursos públicos se bloquean incluso si el recurso al que no se puede acceder desde la Web es propiedad de la extensión de redireccionamiento.
  • La navegación se bloquea en modo Incógnito, a menos que el valor del campo "incognito" se establezca en "split".

No es necesario permitir las secuencias de comandos de contenido.

Ejemplo

El ejemplo de recursos accesibles para la Web demuestra el uso de este elemento en una extensión que funciona.