Política de Segurança de Conteúdo

Se você não conhece a Política de Segurança de Conteúdo (CSP, na sigla em inglês), a Introdução à Política de Segurança de Conteúdo é um bom ponto de partida. Esse documento abrange a visão mais ampla da plataforma da Web da CSP. A CSP do app Chrome não é tão flexível.

A CSP é uma política para reduzir problemas de scripting em vários sites, e todos sabemos que esse tipo de script é ruim. Não vamos tentar convencê-lo de que a CSP é uma nova política dinâmica. Há trabalho envolvido, e você precisa aprender a fazer tarefas fundamentais de maneira diferente.

O objetivo deste documento é informar exatamente qual é a política da CSP para apps do Chrome, o que você precisa fazer para estar em conformidade com ela e como você ainda pode realizar essas tarefas fundamentais sem deixar de cumprir a CSP.

O que é a CSP para apps do Chrome?

A Política de Segurança de Conteúdo para apps do Chrome impede que você faça o seguinte:

  • Não é possível usar o script in-line nas páginas de apps do Chrome. A restrição proíbe blocos <script> e manipuladores de eventos (<button onclick="...">).
  • Não é possível referenciar recursos externos em nenhum dos arquivos do app, exceto recursos de vídeo e áudio. Não é possível incorporar recursos externos em um iframe.
  • Não é possível usar métodos de string para JavaScript, como eval() e new Function().

Isso é implementado com o valor da política a seguir:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

O app Chrome só pode referenciar scripts e objetos dentro dele, com exceção de arquivos de mídia (os apps podem se referir a vídeo e áudio fora do pacote). As extensões do Chrome permitem relaxar a Política de Segurança de Conteúdo padrão, mas os apps do Chrome não.

Como obedecer à CSP

Todo JavaScript e recursos devem ser locais (tudo é empacotado em seu aplicativo do Chrome).

"Mas como eu..."

É muito possível que você esteja usando bibliotecas de modelos, e muitas delas não funcionarão com a CSP. Você também pode acessar recursos externos no app, como imagens externas e conteúdo de sites.

Usar bibliotecas de modelos

Está tudo pronto usando uma biblioteca que ofereça modelos pré-compilados. Você ainda pode usar uma biblioteca que não oferece a pré-compilação, mas isso exige certo trabalho e há restrições.

Você precisará usar o sandbox para isolar qualquer conteúdo para o qual queira fazer ações de "avaliação". O sandbox aumenta a CSP no conteúdo que você especifica. Se você quiser usar as APIs mais avançadas do Chrome no app do Chrome, seu conteúdo no sandbox não vai poder interagir diretamente com essas APIs. Consulte Conteúdo local do sandbox.

Acessar recursos remotos

É possível buscar recursos remotos com XMLHttpRequest e exibi-los por URLs blob:, data: ou filesystem:. Consulte Como referenciar recursos externos.

Vídeo e áudio podem ser carregados de serviços remotos porque têm um bom comportamento de substituto quando off-line ou com conectividade instável.

Incorporar conteúdo da Web

Em vez de usar um iframe, é possível chamar um URL externo usando uma tag do WebView. Consulte Incorporar páginas da Web externas.