Se você não está familiarizado com a Política de Segurança de Conteúdo (CSP), Uma introdução à segurança de conteúdo Políticas é 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 mitigar problemas de scripting em vários sites. Sabemos que o scripting é ruim. Não vamos tentar convencer você de que o CSP é uma nova política moral e confusa. Há trabalho envolvido, você vai precisar aprender como fazer as tarefas fundamentais de maneira diferente.
O objetivo deste documento é informar exatamente qual é a política de CSP para os apps do Chrome, o que você precisa fazer para estar em conformidade com ela e como você ainda pode realizar essas tarefas fundamentais de uma maneira que seja em conformidade com o CSP.
Qual é o CSP para apps do Chrome?
A Política de Segurança de Conteúdo dos apps do Chrome impede que você faça o seguinte:
- Não é possível usar scripts inline nas páginas do seu app do Chrome. A restrição bloqueia os dois bloqueios de
<script>
e manipuladores de eventos (<button onclick="...">
). - Não é possível fazer referência a recursos externos nos arquivos do app, exceto vídeo e áudio recursos. Não é possível incorporar recursos externos em um iframe.
- Não é possível usar métodos de string para JavaScript, como
eval()
enew Function()
.
Isso é implementado usando o seguinte valor de política:
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:;
Seu Aplicativo do Google Chrome só pode se referir a scripts e objetos dentro de seu aplicativo, com exceção de mídias (os aplicativos podem se referir a vídeo e áudio fora do pacote). As extensões do Chrome permitem que você relaxe a Política de Segurança de Conteúdo padrão; Os apps do Chrome não fazem isso.
Como obedecer à CSP
Todo o JavaScript e todos os recursos devem ser locais (tudo é empacotado em seu aplicativo do Google Chrome).
"Mas então como eu..."
É possível que você esteja usando bibliotecas de modelos e muitas delas não funcionem com o CSP. Você também pode querer acessar recursos externos no aplicativo (imagens externas, conteúdo de sites).
Usar bibliotecas de modelos
Use uma biblioteca que ofereça modelos pré-compilados e pronto. Você ainda pode usar uma biblioteca não oferece pré-compilação, mas exige algum trabalho de sua parte e há restrições.
Você vai precisar usar o sandbox para isolar qualquer conteúdo que queira fazer "avaliação" coisas. O sandbox aumenta a CSP no conteúdo que você especificar. Se você quiser usar o poderoso navegador Chrome APIs em seu aplicativo do Google Chrome, o conteúdo no sandbox não poderá interagir diretamente com essas APIs (consulte conteúdo local no sandbox).
Acessar recursos remotos
É possível buscar recursos remotos via XMLHttpRequest
e exibi-los por blob:
, data:
ou
filesystem:
URLs (consulte Como fazer referência a recursos externos).
Vídeo e áudio podem ser carregados de serviços remotos porque têm bom comportamento de substituição quando off-line ou com conectividade instável.
Incorporar conteúdo da Web
Em vez de usar um iframe, você pode chamar um URL externo usando uma tag WebView (consulte Incorporar páginas da Web externas).