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()
enew 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).