Manifiesto: Recursos accesibles en la Web

Los recursos accesibles a través de la web son archivos dentro de una extensión a los que se puede acceder a través de páginas web u otros extensiones. Por lo general, las extensiones utilizan esta función para exponer imágenes u otros elementos que se deben se cargan en las páginas web, pero cualquier recurso incluido en el paquete de una extensión se puede hacer accesible desde la Web.

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

Declaración del manifiesto

Usa la propiedad web_accessible_resources del manifiesto para declarar qué recursos están expuestos y en cuáles son sus orígenes. Esta propiedad es un array de objetos que declara las reglas de acceso a los recursos. Cada objeto muestra una cantidad de recursos de extensión y debe proporcionar un valor para, al menos, uno de los matches o Claves 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 estos elementos:

"resources"
Es un array de cadenas, cada una de las cuales contiene una ruta de acceso relativa a un recurso determinado desde el directorio raíz de la extensión. Los recursos pueden contener asteriscos (*) para las coincidencias con comodines. Por ejemplo, "/images/*" expone todo lo que se encuentra en el 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 de las cuales contiene 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 las coincidencias de subdominios. Google Chrome emite un "Patrón de coincidencia no válido" si el patrón tiene una ruta de acceso distinta de “/*”.
"extension_ids"
Es un array de cadenas, cada una de las cuales contiene 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 páginas web que coinciden con el patrón o a extensiones con IDs coincidentes.

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

Se bloquea una navegación de un origen web a un recurso de extensión, a menos que el recurso se aparecen como accesibles desde la Web. Ten en cuenta estos casos límite:

  • Cuando una extensión usa la API de webRequest para redireccionar un sitio web una solicitud de recurso a un recurso al que no se puede acceder desde la Web, esa solicitud también se bloquea.
  • Los redireccionamientos de los recursos públicos se bloquean incluso si el recurso al que no se puede acceder desde la Web pertenece a la .
  • La navegación está bloqueada en el 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

En el ejemplo de recursos accesibles a la Web, se demuestra el uso de este elemento en una extensión en funcionamiento.