Criteri di sicurezza del contenuto

Se non hai dimestichezza con il criterio di sicurezza del contenuto (CSP), An Introduction to Content Security Policy è un buon punto di partenza. Il documento tratta la visione più ampia della piattaforma web di CSP; il CSP per app Chrome non è così flessibile.

CSP è una norma che mitiga i problemi di cross-site scripting (XSS) e sappiamo tutti che questo è un problema. Non cercheremo di convincerti che i fornitori di servizi per i creator sono una nuova e complessa norma. È richiesto molto lavoro, dovrai imparare a svolgere le attività fondamentali in modo diverso.

Lo scopo di questo documento è illustrarti esattamente quali sono i criteri CSP per le app di Chrome, cosa devi fare per rispettarli e come puoi continuare a svolgere queste attività fondamentali in modo conforme a CSP.

Che cos'è il CSP per le app di Chrome?

I criteri di sicurezza dei contenuti per le app di Chrome non consentono di:

  • Non puoi utilizzare lo scripting incorporato nelle pagine dell'app Chrome. La limitazione esclude sia i blocchi <script> sia i gestori di eventi (<button onclick="...">).
  • Non puoi fare riferimento a risorse esterne nei file dell'app (ad eccezione delle risorse video e audio). Non puoi incorporare risorse esterne in un iframe.
  • Non puoi utilizzare metodi stringa a JavaScript come eval() e new Function().

Ciò viene implementato tramite il seguente valore del criterio:

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:;

L'app di Chrome può fare riferimento solo a script e oggetti al suo interno, ad eccezione dei file multimediali (le app possono fare riferimento a video e audio al di fuori del pacchetto). Le estensioni di Chrome consentono di allentare il criterio di sicurezza del contenuto predefinito, al contrario delle app di Chrome.

Come rispettare i CSP

Tutto JavaScript e tutte le risorse devono essere locali (tutto è pacchettizzato nell'app Chrome).

"Ma poi come faccio a..."

È molto possibile che tu stia utilizzando librerie di modelli e molte di queste non funzionano con CSP. Puoi anche accedere a risorse esterne nella tua app (immagini esterne, contenuti di siti web).

Utilizzo delle librerie di modelli

Utilizza una libreria che offre modelli precompilati e il gioco è fatto. Puoi comunque utilizzare una libreria che non offre la precompilazione, ma sarà necessario un po' di lavoro da parte tua e ci sono limitazioni.

Dovrai utilizzare la limitazione tramite sandbox per isolare i contenuti a cui vuoi valutare le cose. La limitazione tramite sandbox riduce il CSP ai contenuti specificati. Se vuoi utilizzare API di Chrome molto potenti nella tua app di Chrome, i contenuti con sandbox non possono interagire direttamente con queste API (consulta la sezione Contenuti locali sandbox).

Accedi alle risorse remote

Puoi recuperare risorse remote tramite XMLHttpRequest e pubblicarle tramite URL blob:, data: o filesystem: (consulta la sezione Riferimenti delle risorse esterne).

Video e audio possono essere caricati da servizi remoti perché hanno un buon comportamento di fallback quando offline o in caso di connettività instabile.

Incorporare contenuti web

Anziché utilizzare un iframe, puoi richiamare un URL esterno utilizzando un tag WebView (consulta la sezione Incorporamento di pagine web esterne).