Modules

Sécurité bonne pratique

Voici une liste des meilleures pratiques à suivre pour protéger les utilisateurs de votre extension. Si vous ne suivez pas ces bonnes pratiques, votre extension risque d'échouer les avis sur addons.mozilla.org, Si vous ne suivez pas ces bonnes pratiques, votre extension risque d'échouer les avis survous empêchant ainsi de distribuer votre module ou de le bloquer à l'installation dans Firefox.

  • Ne pas injecter ou incorporer des scripts distants
    Si vous identifiez un service que vous souhaitez utiliser dans votre extension, n'injectez pas le script du service à partir d'une source distante. Une telle approche est risquée, car le code pourrait être modifié sans que vous le sachiez — et, surtout, sans la connaissance et le consentement de l'utilisateur des extensions — compromettant la sécurité de votre extension. Vous devriez donc ajouter une copie du script dans le code de votre extension.
  • Assurez-vous d'insérer le contenu distant en toute sécurité
    Assurez-vous de suivre les bonnes pratiques lorsque votre extension utilise du contenu distant :
    • insérez des chaînes à l'aide de méthodes de manipulation DOM natives sécurisées : document.createElement, Element.setAtttribute, et Node.textContent.
    • utilisez les fonctions attr() et text() pour insérer des chaînes.
    • assainir le contenu HTML avec DOMPurify.
    • utiliser des commandes de moteur de modèle qui échappent à tout code HTML avant de l'insérer.

    Pour plus d'informations, voir Insérer du contenu externe en toute sécurité dans une page.

  • Utiliser XHR pour Google Analytics
    Si vous souhaitez ajouter Google Analytics à votre extension, n'insérez pas le code JavaScript Google Analytics. Il est plutôt recommandé d'utiliser l'API REST Google Analytics dans un appel XHR, par exemple:
    let request = new XMLHttpRequest();
    let message =
      "v=1&tid=" + GA_TRACKING_ID + "&cid= " + GA_CLIENT_ID + "&aip=1" +
      "&ds=add-on&t=event&ec=AAA&ea=" + aType;
          
    request.open("POST", "https://www.google-analytics.com/collect", true);
    request.send(message);
    Vous pouvez trouver plus d'informations dans l'article de blog Utilisation de Google Analytics dans les Extensions.
  • Utiliser la stratégie de sécurité du contenu de l'extension standard (CSP)
    La stratégie standard limite les sources à partir desquelles votre extension peut charger les ressources <script> et <object>, et interdit les pratiques potentiellement dangereuses, telles que l'utilisation de eval(). Bien que la clé manifest.json content_security_policy vous permette de modifier la stratégie de sécurité du contenu de votre extension, cette opération n'est pas recommandée car elle empêche les extensions d'exécuter involontairement du contenu malveillant. Si votre CSP modifié autorise l'injection de script à distance, votre extension sera rejetée par AMO pendant la révision.
    Pour plus d'informations, voir Stratégie de sécurité du contenu par défaut.
  • Partagez des objets avec JavaScript sur la page avec soin
    Firefox fournit wrappedJSObject afin qu'un script de contenu puisse accéder aux objets JavaScript créés par les scripts de page. Le danger ici est qu'une page Web malveillante puisse, par exemple, modifier les fonctions des objets JavaScript pour exécuter son propre code.
    Pour plus d'informations, voir Accès aux objets de script de page à partir de scripts de contenu.
  • Utilisez window.eval() dans les scripts de contenu avec prudence
    Vous devez être très prudent lorsque vous exécutez du code dans le contexte d'une page. Une page Web malveillante pourrait tenter d'exécuter du code en exploitant l'utilisation de window.eval(). Il peut le faire, par exemple, en redéfinissant les objets que votre code pourrait vouloir évaluer.
    Pour plus d'informations, voir Ne pas utiliser eval inutilement !
  • Créez votre interface utilisateur avec des composants d'extension
    Créez l'interface utilisateur de votre extension à l'aide des fonctions intégrées de l'interface utilisateur d'extension, telles que les pages groupées, pageAction et les fenêtres contextuelles sur pageAction et browserAction. N'ajoutez pas d'éléments d'interface utilisateur, tels que des boutons ou des barres d'outils, directement aux pages Web. Si vous le faites, les scripts sur la page Web pourraient compromettre votre extension. Voir extension du navigateur Keybase Insecure pour un exemple des problèmes potentiels.
    Si les composants de l'interface utilisateur standard ne suffisent pas, utilisez des iframes avec des URL de données pour éviter les empreintes digitales ou ajoutez des iframes au code d'extension afin qu'une page ne puisse pas interagir avec le contenu de votre interface utilisateur, comme les boutons.
  • Ajouter eslint-plugin-no-unsanitized à ESLint
    Si vous utilisez ESLint pour vérifier votre code d'extension, pensez à ajouter eslint-plugin-no-unsanitized. Ce plug-in de règles ESLint signale les instances où du code non-initié provenant d'API ou d'entrées utilisateur peut provoquer des problèmes.
  • Ne pas injecter les chemins moz-extension directement
    Lorsque les liens, les inclusions ou les images injectés incluent des chemins vers  moz-extension://{hash} le script de suivi d'une page peut utiliser cette information pour identifier l'utilisateur, car le hachage (UUID) est unique à l'installation de l'extension et, par conséquent, l'utilisateur.
    La meilleure façon d'éviter ce problème est de suivre les conseils généraux concernant l'injection de contenu. Cependant, si vous pensez que l'injection de contenu est votre seule approche pratique, assurez-vous que les chemins moz-extension sont incorporés dans un iframe en utilisant une URL de données ou l'attribut srcdoc.
  • S'assurer que les bibliothèques tierces sont à jour
    tierces réputées seront mises à jour lorsque des problèmes seront détectés. L'utilisation de bibliothèques tierces périmées (et potentiellement non sécurisées) est fortement déconseillée et, lorsqu'un risque important est identifié, l'AMO peut agir pour bloquer les extensions en utilisant le code obsolète.
    Par conséquent, utilisez toujours la dernière version des bibliothèques tierces lorsque vous créez votre extension. Ensuite, prenez connaissance des mises à jour de ces bibliothèques et soyez prêt à mettre à jour votre extension pour vous assurer qu'elle utilise une version à jour de la bibliothèque.
  • Ne pas modifier les bibliothèques tierces
    Les modifications apportées à une bibliothèque tierce sont un indicateur significatif qu'un développeur essaie de cacher du code malveillant dans un code généralement connu et approuvé. AMO va donc essayer de détecter les modifications apportées aux bibliothèques tierces et peut désactiver les extensions lorsqu'il trouve des modifications.

Étiquettes et contributeurs liés au document

Contributeurs à cette page : hellosct1
Dernière mise à jour par : hellosct1,