Als u niet bekend bent met Content Security Policy (CSP), is An Introduction to Content Security Policy een goed startpunt. Dat document behandelt de bredere webplatformvisie van CSP; Chrome App CSP is niet zo flexibel.
CSP is een beleid om problemen met cross-site scripting te verminderen, en we weten allemaal dat cross-site scripting slecht is. We gaan niet proberen u ervan te overtuigen dat CSP een warm en vaag nieuw beleid is. Er komt werk bij kijken; je zult moeten leren hoe je fundamentele taken anders kunt uitvoeren.
Het doel van dit document is om u precies te vertellen wat het CSP-beleid voor Chrome-apps is, wat u moet doen om hieraan te voldoen en hoe u die fundamentele taken nog steeds kunt uitvoeren op een manier die CSP-compatibel is.
Wat is de CSP voor Chrome-apps?
Het inhoudsbeveiligingsbeleid voor Chrome-apps verbiedt u het volgende te doen:
- U kunt geen inline scripting gebruiken op uw Chrome-app-pagina's. De beperking verbiedt zowel
<script>
blokken als gebeurtenishandlers (<button onclick="...">
). - U kunt in geen van uw app-bestanden verwijzen naar externe bronnen (behalve video- en audiobronnen). U kunt geen externe bronnen insluiten in een iframe.
- U kunt geen string-naar-JavaScript-methoden zoals
eval()
ennew Function()
gebruiken.
Dit wordt geïmplementeerd via de volgende beleidswaarde:
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:;
Uw Chrome-app kan alleen verwijzen naar scripts en objecten binnen uw app, met uitzondering van mediabestanden (apps kunnen verwijzen naar video en audio buiten het pakket). Met Chrome-extensies kunt u het standaard inhoudsbeveiligingsbeleid versoepelen; Chrome-apps doen dat niet.
Hoe u kunt voldoen aan de CSP
Alle JavaScript en alle bronnen moeten lokaal zijn (alles wordt verpakt in uw Chrome-app).
"Maar hoe moet ik dan..."
Het is heel goed mogelijk dat u sjabloonbibliotheken gebruikt en dat veel daarvan niet met CSP werken. Mogelijk wilt u ook toegang krijgen tot externe bronnen in uw app (externe afbeeldingen, inhoud van websites).
Gebruik sjabloonbibliotheken
Gebruik een bibliotheek met vooraf gecompileerde sjablonen en u bent klaar. U kunt nog steeds een bibliotheek gebruiken die geen precompilatie biedt, maar dit vergt wat werk van uw kant en er zijn beperkingen.
U zult sandboxing moeten gebruiken om alle inhoud te isoleren waarmee u dingen wilt 'evalueren'. Sandboxing verhoogt de CSP voor de inhoud die u opgeeft. Als u de zeer krachtige Chrome API's in uw Chrome-app wilt gebruiken, kan uw in de sandbox geplaatste inhoud niet rechtstreeks communiceren met deze API's (zie Lokale inhoud in de sandbox ).
Toegang tot bronnen op afstand
U kunt externe bronnen ophalen via XMLHttpRequest
en deze aanbieden via blob:
, data:
of filesystem:
URL's (zie Verwijzen naar externe bronnen ).
Video en audio kunnen worden geladen vanaf externe services omdat ze goed terugvalgedrag vertonen wanneer ze offline zijn of bij een slechte verbinding.
Webinhoud insluiten
In plaats van een iframe te gebruiken, kunt u een externe URL aanroepen met behulp van een webview-tag (zie Externe webpagina's insluiten ).