Si vous ne connaissez pas Content Security Policy (CSP), Introduction to Content Security Policy est un bon point de départ. Ce document présente le point de vue global de CSP sur les plates-formes Web. CSP pour l'application Chrome n'est pas aussi flexible.
CSP vise à limiter les problèmes de script intersites. Nous savons tous que les scripts intersites les scripts sont mauvais. Nous n'allons pas essayer de vous convaincre que CSP est une nouvelle politique chaotique et floue. Cela demande du travail ; vous devrez apprendre à effectuer les tâches fondamentales différemment.
L'objectif de ce document est de vous expliquer en détail en quoi consiste la règle CSP pour les applications Chrome, pour s'y conformer, et comment continuer à effectuer ces tâches fondamentales Compatible avec CSP.
Quelle est la CSP pour les applications Chrome ?
La stratégie Content Security Policy des applications Chrome vous empêche d'effectuer les actions suivantes:
- Vous ne pouvez pas utiliser de scripts intégrés dans les pages de votre application Chrome. La restriction interdit les deux blocages
<script>
et les gestionnaires d'événements (<button onclick="...">
). - Vous ne pouvez référencer aucune ressource externe dans les fichiers de votre application (à l'exception des fichiers vidéo et audio) ressources). Vous ne pouvez pas intégrer de ressources externes dans un iFrame.
- Vous ne pouvez pas utiliser de méthodes de type chaîne vers JavaScript, telles que
eval()
etnew Function()
.
Cela est implémenté via la valeur de règle suivante:
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:;
Votre application Chrome ne peut faire référence qu'aux scripts et aux objets de votre application, à l'exception des fichiers multimédias (les applications peuvent faire référence à des contenus vidéo et audio en dehors du package). Détendez-vous grâce aux extensions Chrome Content Security Policy par défaut Ce n'est pas le cas des applications Chrome.
Respecter CSP
Tout code JavaScript et toutes les ressources doivent être en local (tout est empaqueté dans votre application Chrome).
"Mais comment puis-je..."
Il est possible que vous utilisiez des bibliothèques de modèles, et nombre d'entre elles ne fonctionnent pas avec CSP. Vous pouvez également avoir besoin d'accéder à des ressources externes dans votre application (images externes, contenu de sites Web).
Utiliser des bibliothèques de modèles
Utilisez une bibliothèque qui propose des modèles précompilés. Vous pouvez toujours utiliser une bibliothèque qui ne propose pas de précompilation, mais cela nécessitera un travail de votre part et des restrictions s'appliqueront.
Vous devrez utiliser un système de bac à sable pour isoler le contenu que vous souhaitez "évaluer" les choses. Le système de bac à sable lève la CSP sur le contenu que vous spécifiez. Si vous souhaitez utiliser le navigateur très performant dans votre application Chrome, le contenu exécuté en bac à sable ne peut pas interagir directement avec ces API (consultez Contenu local de bac à sable).
Accéder aux ressources distantes
Vous pouvez récupérer des ressources distantes via XMLHttpRequest
et les diffuser via blob:
, data:
ou
URL filesystem:
(voir Référencer des ressources externes).
Les fichiers audio et vidéo peuvent être chargés depuis des services distants, car ils ont un comportement de remplacement hors connexion ou sous une connectivité instable.
Intégrer du contenu Web
Au lieu d'utiliser un iFrame, vous pouvez faire appel à une URL externe à l'aide d'un tag WebView (voir la section Intégrer pages Web externes).