Content Security Policy

Si vous ne connaissez pas Content Security Policy (CSP), la présentation de Content Security Policy est un bon point de départ. Ce document présente une vue d'ensemble de la plate-forme Web de CSP. CSP de l'application Chrome n'est pas aussi flexible.

CSP est une politique visant à atténuer les problèmes de script intersites, et nous savons tous que ces scripts sont incorrects. Nous n'allons pas essayer de vous convaincre que CSP est une nouvelle règle imparfaite. Il y a du travail ; vous devrez apprendre à effectuer les tâches fondamentales différemment.

L'objectif de ce document est de vous expliquer précisément en quoi consiste la règle CSP pour les applications Chrome, ce que vous devez faire pour s'y conformer et comment vous pouvez toujours effectuer ces tâches fondamentales tout en respectant CSP.

Qu'est-ce que la CSP pour les applications Chrome ?

La règle relative à la sécurité du contenu des applications Chrome vous empêche d'effectuer les opérations suivantes:

  • Vous ne pouvez pas utiliser les scripts intégrés dans les pages de vos applications Chrome. La restriction interdit à la fois les blocs <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 ressources vidéo et audio). Vous ne pouvez pas intégrer de ressources externes dans un iFrame.
  • Vous ne pouvez pas utiliser de méthodes de conversion de type chaîne en JavaScript telles que eval() et new Function().

Ce paramètre 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:;

À l'exception des fichiers multimédias, votre application Chrome ne peut faire référence qu'aux scripts et aux objets qu'elle contient, à l'exception des fichiers multimédias (les applications peuvent faire référence à la vidéo et à l'audio en dehors du package). Les extensions Chrome vous permettent d'assouplir la Content Security Policy par défaut, contrairement aux applications Chrome.

Respecter les CSP

L'ensemble du code JavaScript et toutes les ressources doivent être en local (tous les éléments sont empaquetés dans votre application Chrome).

"Mais comment puis-je..."

Vous utilisez peut-être des bibliothèques de modèles, dont la plupart ne fonctionnent pas avec CSP. Vous pouvez également accéder à des ressources externes dans votre application (images externes, contenu de sites Web).

Utiliser des bibliothèques de modèles

Il vous suffit d'utiliser une bibliothèque qui propose des modèles précompilés. Vous pouvez toujours utiliser une bibliothèque qui n'offre pas de précompilation, mais cela nécessite un travail de votre part et des restrictions s'appliquent.

Vous devez utiliser le système de bac à sable pour isoler le contenu pour lequel vous souhaitez effectuer une évaluation. Le bac à sable lève CSP sur le contenu que vous spécifiez. Si vous souhaitez utiliser des API Chrome très puissantes dans votre application Chrome, votre contenu en bac à sable ne peut pas interagir directement avec ces API (consultez la section Contenu local en bac à sable).

Accéder aux ressources distantes

Vous pouvez extraire des ressources distantes via XMLHttpRequest et les diffuser via des URL blob:, data: ou filesystem: (voir Référencer des ressources externes).

La vidéo et l'audio peuvent être chargés à partir de services distants, car ils offrent un bon comportement de remplacement en cas de connexion hors connexion ou d'une connectivité instable.

Intégrer du contenu Web

Au lieu d'utiliser un iFrame, vous pouvez appeler une URL externe à l'aide d'un tag WebView (voir Intégrer des pages Web externes).