Manifesto - Recursos acessíveis na Web

Recursos acessíveis pela Web são arquivos dentro de uma extensão que podem ser acessados por páginas da Web ou outras extensões. As extensões geralmente usam esse recurso para expor imagens ou outros recursos que precisam ser carregado em páginas da Web, mas qualquer recurso incluído em um pacote de extensão pode ser acessado na Web.

Por padrão, nenhum recurso é acessível pela Web, o que permite que um site malicioso identifique extensões instaladas por um usuário ou explore vulnerabilidades (por exemplo, bugs XSS) nas extensões instaladas. Somente páginas ou scripts carregados da origem de uma extensão pode acessar os recursos dela.

Declaração do manifesto

Use a propriedade de manifesto web_accessible_resources para declarar quais recursos são expostos e para quais origens. Essa propriedade é uma matriz de objetos que declara regras de acesso a recursos. Cada objeto mapeia uma matriz de recursos de extensão para uma matriz de URLs e/ou IDs de extensão que podem acessar esses 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/*" ],
      "use_dynamic_url": true
    }
  ],
  ...
}

Cada objeto na matriz contém estes elementos:

"resources"
Uma matriz de strings, cada uma contendo um caminho relativo para um determinado recurso do diretório raiz da extensão. Os recursos podem conter asteriscos (*) para correspondências de caracteres curinga. Por exemplo, "/images/*" expõe tudo no diretório images/ da extensão de forma recursiva, enquanto "*.png" expõe todos os arquivos PNG.
"matches"
Uma matriz de strings, cada uma contendo um padrão de correspondência que especifica quais sites podem acessar esse conjunto de recursos. Somente a origem é usada para corresponder aos URLs. As origens incluem a correspondência de subdomínios. O Google Chrome emite um "padrão de correspondência inválido" se o padrão tiver um caminho diferente de '/*'.
"extension_ids"
Uma matriz de strings, cada uma contendo o ID de uma extensão com acesso aos recursos.
"use_dynamic_url"
Se verdadeiro, permite que apenas os recursos sejam acessados usando um ID dinâmico. Um ID dinâmico é gerado por sessão. Isso significa que ele é regenerado quando o navegador é reiniciado ou a extensão é recarregada.

Cada elemento precisa incluir um elemento "resources" e um elemento "matches" ou "extension_ids". Isso estabelece um mapeamento que expõe os recursos especificados para páginas da Web que correspondem ao padrão ou para extensões com IDs correspondentes. O elemento "use_dynamic_url" é opcional.

Os recursos estão disponíveis em uma página da Web pelo URL chrome-extension://[PACKAGE ID]/[PATH], que pode ser gerado com o método runtime.getURL(). Os recursos são veiculados com cabeçalhos CORS apropriados, para que fiquem disponíveis por fetch().

A navegação de uma origem da Web para um recurso de extensão é bloqueada, a menos que o recurso seja listados como acessíveis pela web. Observe estes casos específicos:

  • Quando uma extensão usa a API webRequest para redirecionar um usuário solicitação de recurso para um recurso que não pode ser acessado pela Web, essa solicitação também será bloqueada.
  • A instrução acima é verdadeira mesmo se o recurso que não estiver acessível na Web for de propriedade do redirecionamento .
  • A navegação fica bloqueada no modo de navegação anônima, a menos que o valor do campo "incognito" esteja definido como "split".

Os scripts de conteúdo não precisam ser autorizados.

Exemplo

O exemplo de recursos acessíveis da Web demonstra o uso desse elemento em uma extensão que funciona.