Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

CSP des Apps

Contrairement aux site traditionnels, les apps privilégiées et certifiées imposent une CSP (politique de sécurité de contenu) par défaut. Cela peut faire cesser de fonctionner une importante partie du code lors de portages et peut causer une confusion importante chez les développeurs qui ne seraient pas au courant de l'existence de la CSP.

Si une CSP est spécifiée dans le Manifeste de l'app, la CSP spécifiée et celle par défaut pour le type de l'app seront fusionnées. Une CSP spécifiée ne peut abaisser les restrictions de la CSP par défaut.

Le Validateur du Firefox Marketplace détecte les violations de la CSP pendant le processus de soumission d'app. Il peut être utilisé pour aider à détecter les problèmes dès les débuts du développement d'une app.

Restrictions applicables de la CSP

Les scripts distants sont interdits
Vous ne pouvez mettre en source d'un <script> un fichier javascript distant. Cela implique que tout fichier JS utilisé par l'app doit être inclu dans le package.
Les scripts inline sont interdits
Vous ne pouvez inclure de scripts inline dans votre HTML. Toute balise <script> doit avoir un attribut src="". Vous ne pouvez pas non plus utiliser les attributs de script comme onclick="" ou onload="". Vous ne pouvez pas créer de balise <script> dynamiquement et assigner de contenu à leur propriété innerHTML.
Les URI javascript: sont interdites
Les URIs du type <a href="javascript:alert('foo')"> ne seront pas exécutées.
eval est interdit
Vous ne pouvez pas utiliser la fonction eval() ou l'opérateur eval. Les deux lanceront des erreurs de sécurité.
Le constructeur de fonction est interdit
Vous ne pouvez pas utiliser le constructeur Function(). L'utiliser lancera une erreur de sécurité.
L'exécution de code dynamique dans setTimeout et setInterval est interdite
Vous DEVEZ passer des objets appelables (c-à-d: fonctions) aux fonctions setTimeout et setInterval. Leur passer des chaînes de caractères ne créera pas de timer et la fonction retournera 0.
Les Web Workers distants ne sont pas autorisés
Si un Worker ou un SharedWorker est créé avec une URL distante, il se comportera comme si le serveur avait répondu avec une erreur 400.
Les balises Script ne peuvent être créées avec des URL distantes
Si une balise <script> est créée via document.createElement(), donner à son attribut src une URL distante la fera se comporter comme si le serveur avait répondu avec une erreur400.
Les plugins sont interdits
L'utilisation de balises <object> et <embed> est interdite. Java, Unity, Silverlight, Flash, ou Shockwave ne peuvent être utilisés.
Les styles distants sont interdits
Toute balise <link rel="stylesheet" href="..."> doit référer à des fichiers dans le package de votre app. Les styles inline (style="") et les balises <style> sont cependant autorisées pour les apps privilégiées.

Restrictions des apps certifiées

Les apps certifiées sont sujettes à d'autres restrictions.

Les styles inline sont interdits
<style> et style="" sont tous deux interdits.

Politiques par défaut

Les politiques par défaut sont les suivantes:

CSP des apps privilégiées
default-src *; script-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'
CSP des apps certifiées
default-src *; script-src 'self'; object-src 'none'; style-src 'self'

Problèmes communs et questions fréquement posées

Mon app privilégiée lance des erreurs lorsque j'essaie d'utiliser jQuery.
Si votre app réfère au CDN de jQuery, votre code viole la CSP. Assurez-vous d'inclure votre copie de jQuery dans votre package, et liez-la avec l'attribut src="" d'une balise <script>.
Mes templates ne sont pas rendus dans mon app priviliégiée packagée.
Si vous utilisez une bibliothèque de templating côté client (tel que Mustache ou Nunjucks), vous devez vous assurer de précompiler vos templates. Cela signifie que vous devez lancer un script pour compiler vos templates du HTML au JavaScript avant de packager votre app. Les apps privilégiées ne peuvent utiliser de chargeurs distants qui téléchargent et compilent des templates à la volée car le compilateur utilise eval() ou new Function(), qui sont tous deux interdits.
J'ai configuré la CSP dans mon manifeste pour autoriser l'utilisation de [fonctionnalité], mais elle ne marche toujours pas.
Vous ne pouvez pas adoucir les restrictions par défaut des apps packagées privilégiées ou certfiées. Le champ CSP dans le manifeste de l'app peut seulement être utilisé pour renforcer les restrictions de la CSP, pas pour les adoucir.
Lorsque j'utilise certaines méthodes de jQuery, elles ne fonctionnenent pas comme attendu. Pourquoi ?
Certaines méthodes de jQuery - telles que celles qui chargent du JSON-P et du HTML distant - peut violer la CSP. Le code chargé loaded via JSON-P injecte une balise <script> dans la page, ce qui viole la CSP. Vous devriez utiliser des APIs CORS au lieu de JSON-P. jQuery va aussi tenter de télécharger et d'exécuter des scripts distants lors de l'utilisation de méthodes comme load() et html(), ce qui viole de la même façon la CSP en créant des balises <script>.
J'ai besoin de lancer du code chargé depuis un domaine externe, mais je ne peux pas car c'est bloqué par la CSP.
Tentez de charger le code dans un <iframe> distant ou avec une URI de type data: et utilisez postMessage() pour transmettre et recevoir des messages du script. Les Iframes qui ne partagent pas l'origine de votre app ne sont pas soumis à la CSP.
Pourquoi mes événements click et hover ne sont-ils pas déclenchés ?
Si vous définissez des gestionnaires d'événements click ou hover avec onclick="" ou onmouseover="", votre code viole la CSP. Vous ne pouvez pas définir d'attributs d'événements dans une app privilégiée et packagée. Vous devriez utiliser addEventListener() à la place.
Lorsque je soumets mon app packagée au Marketplace, j'obtiens plusieurs avertissements de CSP (CSP warnings). Pourquoi ?
Le validateur du Marketplace essaie de détecter le code qui violerait la CSP. Il produit ces avertissements que votre app soit privilégiée ou pas. Ces avertissement sont conçus pour aider à pointer les potentiels violations de la CSP aux développeurs et aux reviewers du Marketplace. Dans plusieurs cas, les avertissements de CSP sont des faux positifs, mais ils peuvent également fournir du feedback utile pour améliorer le code de votre app. Les violations de CSP indiquent parfois un style de codage relâché et peuvent indiquer que vous devriez revoir votre travail.

Les avertissements de CSP du validateur N'impacteront PAS l'acceptation de votre app sur le Marketplace. Si votre app est privilégiée et elle viole la CSP, cependant, il vous sera demandé de corriger ce problème avant que votre app soit acceptée.

Voir aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : 316k, Goofy
 Dernière mise à jour par : 316k,