Demander les bonnes permissions

Ou comment éviter les permissions décourageant les utilisateurs d'installer vos extensions.

Introduction

Avec l'introduction de Firefox Quantum (57), la gestion des permissions lors de l'installation d'une extension a changé. Auparavant, les permissions étaient accordées silencieusement aux extensions. Cependant, les utilisateurs sont maintenant informés des permissions demandées par une extension lors de son installation, avec un message comme celui-ci:

Example of the permissions messages from the Gesturefy extension

En outre, si une mise à jour d'extension nécessite des permissions supplémentaires, l'utilisateur est invité à approuver les permissions avant l'installation de la version mise à jour :

Example of the message displayed when an extension update requests additional permissions

Si l'utilisateur choisit de ne pas approuver les permissions et annule la mise à jour, la version précédente reste installée et disponible.

L'affichage des messages de permission améliore le modèle de sécurité de l'extension en sensibilisant les utilisateurs à l'impact potentiel de l'installation d'une extension. Il met également Firefox en ligne avec les autres principaux navigateurs, où les utilisateurs ont été informés des demandes de permission des extensions pour un certain temps.

Étant donné que les utilisateurs de Firefox n'ont pas vu les demandes de permissions au cours de l'installation auparavant, cette modification pourrait décourager certains d'entre eux d'installer votre extension, car les messages pourraient suggérer qu'elle fait quelque chose d'effrayant. Nous fournissons aux utilisateurs avec une explication de ces messages de permissions et des conseils sur comment juger s'ils sont appropriés. Cependant, il y a plusieurs choses que vous pouvez faire pour réduire la probabilité que les utilisateurs abandonnent l'installation de votre extension à cause de ces messages :

  • Assurez-vous que vous ne demandez pas de permissions inutiles.
  • Demander des permissions à l'exécution, ce qui vous permet de demander les permissionss en contexte et de proposer une option de repli si l'utilisateur ne les accorde pas.
  • Décrivez pourquoi votre extension demande ses permissions dans sa description AMO.

Conseil: Les avertissements d'autorisation ne sont pas émis lorsque vous chargez une extension décompressée. Pour afficher les avertissements d'autorisation que votre extension affichera aux utilisateurs, installez votre extension à partir de son fichier .xpi ou .zip. Pour installer un fichier .xpi ou .zip non signé, vous devez exécuter les versions  Nightly ou Developer Edition de Firefox avec la préférence xpinstall.signatures.required définie sur "false".

Permissions conseillées

Toutes les permissions ne donnent pas de conseils à l'utilisateur. Les permissions qui déclenchent l'affichage d'un message et les messages qu'ils déclenchent sont :

Permission Permissions messages

Host permissions

Accédez à vos données pour tous les sites Web
Accédez à vos données pour les sites du domaine[named].
Accédez à vos données dans # d'autres domaines
Accédez à vos données pour[site nommé].
Accédez à vos données sur # autres sites".

API permissions:  
  • bookmarks
Lire et modifier les marques pages
  • browserSettings
Lire et modifier les paramètres du navigateur
  • browsingData
Effacer l'historique de navigation récent, les cookies et les données associées.
  • downloads
Télécharger des fichiers et lire et modifier l'historique des téléchargements du navigateur.
  • downloads.open
Ouvrir les fichiers téléchargés sur votre ordinateur
  • find
Lire le texte de tous les onglets ouverts
  • geolocation
Accédez à votre localisation
  • history
Historique de navigation
  • management
Surveiller l'utilisation des extensions et gérer les thèmes
  • nativeMessaging
Échanger des messages avec des programmes autres que Firefox
  • notifications
Afficher les notifications qui vous sont destinées
  • pkcs11
Fournir des services d'authentification cryptographique
  • privacy
Lire et modifier les paramètres de confidentialité
  • proxy
Contrôler les paramètres de proxy du navigateur
  • sessions
Accéder aux onglets récemment fermés
  • tabs
Onglets du navigateur d'accès
  • topSites
Historique de navigation
  • webNavigation
Accéder à l'activité du navigateur pendant la navigation
Clipboard access  
  • clipboardWrite
Saisie des données dans le presse-papiers
  • clipboardRead
Obtenir les données du presse-papiers
unlimitedStorage Stocker un nombre illimité de données côté client
The manifest key "devtools_page" Étendre les outils de développement pour accéder à vos données dans des onglets ouverts.

Les permissions suivantes ne sont pas alertées aux utilisateurs :

  • API permissions
    • alarms
    • contextMenus
    • contextualIdentities
    • cookies
    • identity
    • idle
    • menus
    • storage
    • theme
    • webRequest
    • webRequestBlocking
  • activeTab

Évitez les permissions inutiles

Cette section examine les situations dans lesquelles vous pourriez demander plus de permissions que vos besoins d'extension et ce que vous devez faire à leur sujet.

 

Ne demandez que les permissions que votre extension utilise

Cela peut sembler évident, mais si vous créez une extension en utilisant un exemple précédent en tant que modèle ou si vous supprimez une fonctionnalité au cours du développement ou du test, vous demandez peut-être des permissions dont votre extension n'a pas besoin. En adressant ceci est un cas de faire une vérification manuelle de votre code contre les permissions ("permissions" et "optional_permissions") que vous demandez dans le manifest.json de l'extension.

 

Utilisez "activeTab" plutôt que "tabs" et permissions d'hôte

Prenez une extension que vous développez pour aider les utilisateurs mal-voyants. À la demande de l'utilisateur, vous allez rechercher et mettre à jour CSS dans une page Web pour remplacer les couleurs que l'utilisateur peut avoir du mal à distinguer avec des couleurs sûres. Vous avez évidemment besoin d'accéder et de mettre à jour CSS sur chaque page que votre utilisateur visite. Vous pouvez le faire en demandant la permission "tabs" et la permission d'hôte "<all_urls>".

 

"permissions": [
  "<all_urls>",
  "tabs"
]

Demander ces permissions, permet à l'utilisateur d'obtenir ce conseil :

Example of the "Access your data for all websites" permission message

L'alternative est de demander "activeTab". Cette permission fournit à votre extension les mêmes fonctionnalités mais uniquement pour l'onglet actif et uniquement lorsqu'elle est exécutée à partir de l'interface utilisateur de l'extension (depuis un bouton de barre d'outils, un bouton de barre de navigation, un menu contextuel ou une touche de raccourci).

Fait important, "activeTab" n'entraîne pas l'affichage d'un message de permission lors de l'installation de l'extension.

Evitez la permission d'hôte "<all_urls>" si vous pouvez

Comme indiqué dans l'exemple précédent, demander la permission d'hôte "<all_urls>" entraîne le message de demande d'accès Access à vos données pour tous les sites Webs. Si votre extension est conçue pour fonctionner avec un ou plusieurs sites Web ou domaines, affinez la requête. Lors de l'installation, les utilisateurs recevront des informations sur les quatre premiers sites Web ou les domaines auxquels vous demandez l'accès.

Example of the permissions message when host permission for four websites as requested

Si vous demandez l'accès à plus de quatre sites Web ou domaines, le message liste les trois premiers et indique le nombre d'autres demandes.

Example of the permissions message when hosts permission for 5 or more website is requested

Evitez la permission "unlimitedStorage"

Ne demandez la permission "unlimitedStorage" que si vous estimez que le stockage de données local de votre extension dépasse 5MB s'il ne dépasse pas ce montant, ne le demandez pas.

Example of the permission message when requesting access to unlimited client-side data storage

Remarque: Firefox ne limite pas actuellement la taille du stockage local, bien qu'il demande aux utilisateurs d'approuver cette demande de permission si vous le faites. Firefox peut ajouter une restriction à l'avenir. Si cela se produit, il est peu probable que la limite soit inférieure à la restriction actuelle de 5 Mo de Chrome.

Demander les permissions à éxécuter

Les utilisateurs peuvent ne pas comprendre le contexte des permissions demandées lors de l'installation. L'approche alternative consiste à demander les permissions au besoin, à l'aide de l'API permissions, et à fournir ainsi un contexte à l'utilisateur.

Un scénario typique pour utiliser cette approche est la permission "geoLocation". Supposons que vous avez écrit une extension de prise de notes qui inclut la possibilité d'ajouter une mini-carte de l'emplacement des preneurs de notes. Demander l'accès à l'emplacement pendant l'installation peut laisser l'utilisateur incertain de la raison pour laquelle l'extension doit accéder à l'emplacement, de sorte qu'ils ne l'installeront peut-être pas. Toutefois, si la permission d'utiliser l'emplacement est demandée lorsque l'utilisateur tente d'abord d'ajouter une minicarte, il comprend mieux pourquoi la permission est nécessaire et a plus de chances de l'accorder. Et s'ils choisissent de ne pas accorder la permission, l'extension peut offrir un retour en arrière gracieux — dans cet exemple, sans ajouter la minicarte — mais le résultat important de cette approche est que l'utilisateur a installé et utilisé votre extension.

Example of an additional or runtime permission request message

Faire une demande de permission d'exécution est simple. Incluez les permissions que vous souhaitez demander sous la clé manifest.json "optional_permissions". Passez ensuite les autorisations que vous souhaitez accorder à permissions.request, qui invite l'utilisateur à accorder les permissions. true est renvoyé si l'utilisateur accorde la requête, false si ce n'est pas le cas.

Vous ne pouvez pas demander toutes les permissions disponibles aux "permissions" en utilisant des permissions facultatives. Vous ne pouvez pas demander les permissions d'API suivantes:

  • alarms
  • background
  • browsingData
  • contentSettings
  • contextualIdentities
  • debugger
  • downloads
  • downloads.open
  • find
  • identity
  • menus
  • nativeMessaging
  • pageCapture
  • pkcs11
  • privacy
  • proxy
  • sessions
  • storage
  • theme

Il y a un certain nombre de choses à noter :

  • Vous pouvez uniquement demander des permissions dans le gestionnaire pour une action utilisateur, par exemple à partir d'un bouton de barre d'outils (action du navigateur), d'un élément de menu contextuel ou similaire.
  • Si vous demandez plusieurs permissions à la fois, elles sont toutes accordées ou toutes refusées, l'utilisateur ne peut pas choisir d'en accorder certaines et pas d'autres

Pour plus d'informations sur les permissions facultatives, consultez optional_permissions et l'exemple permissions.

Ajouter des informations sur les permissions à vos extensions page AMO

Les messages de permissions sont plus susceptibles d'empêcher un utilisateur d'installer votre extension, car ils ne comprennent pas pourquoi les permissions sont demandées. Bien que l'utilisateur puisse obtenir des conseils généraux sur l'impact d'une permission, il peut ne pas être suffisant pour lui de comprendre pourquoi une permission est demandée dans votre extension.

Pour résoudre ce problème, fournissez des informations dans la description AMO de votre extension qui explique les permissions demandées par votre extension et pourquoi.

Un bon exemple de cette approche est Gesturefy, qui offre aux utilisateurs les conseils suivants :

Extract from Gesturefy's AMO description providing information on thepermissions requested by this extension

Étiquettes et contributeurs liés au document

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