Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Activer les privileges

Pour des raisons évidentes de sécurité, il n'est pas possible de faire un certain nombre de choses en javascript dans les ApplisWeb, notament utiliser les composants XpCom installés dans Mozilla.

Si l'on souhaite impérativement utiliser ces composants, il va falloir activer les privilèges.

Signer l'application

La meilleure solution reste de signer l'application.

Passer outre la signature (dangereux)

Il existe cependant un autre moyen, mais moins sympa et plus dangereux pour l'internaute. Le voici.

Il vous faut modifier la propriété de configuration signed.applets.codebase_principal_support. Cela nécessite donc l'intervention de l'internaute pour effectuer cette modification.

Pour les versions récentes de Firefox, vous pouvez la modifier en tapant dans le navigateur l'url about:config, puis en double-cliquant sur signed.applets.codebase_principal_support. Mettez la valeur true.

Une autre méthode est de modifier à la main le fichier pref.js situé le profil de l'utilisateur. Cherchez la ligne :

 user_pref("signed.applets.codebase_principal_support", false);

et remplacez la par :

 user_pref("signed.applets.codebase_principal_support", true);

Attention, il ne faut pas que Mozilla soit en cours d'exécution lors de cette opération.

  • *Vous noterez qu'en pratiquant de la sorte, vous abaissez le niveau de sécurité de Mozilla et que vous vous exposez potentiellement à une attaque basée sur un javascript**.

Les scripts pourront donc accéder à certains privilèges quand ils le demandent. Ces demandes requieront toutefois l'autorisation de l'utilisateur. Cela ne peut être fait de façon transparente. Concrètement :

  1. Dans le code, il faut exécuter la commande netscape.security.PrivilegeManager.enablePrivilege('xxx') qui demande les privilèges xxx
  2. à ce moment de l'exécution, une boîte de dialogue s'affiche demandant l'autorisation à l'utilisateur (et l'utilisateur peut accepter pour un temps indefini)
  3. si l'utilisateur a dit oui, la suite du code s'exécute normalement, sinon une exception est générée.

Exemple (pris sur mdc)

 function getHomePage() {
  try {
    // demande la permission pour UniversalPreferencesRead
    netscape.security.PrivilegeManager.enablePrivilege('UniversalPreferencesRead');
    var hp = navigator.preference('browser.startup.homepage');
    alert('Votre page d\'accueil est ' + hp);
  } catch (e) {
    // l'utilisateur refuse la permission
    alert('La permission de lire la page de démarrage a été refusée.');
  }
 }

Si la préférence signed.applets.codebase_principal_support est à false, rien ne sera demandé à l'utilisateur et une exception sera générée au niveau du code qui tente d'accéder à des privilèges.

Types de permission

Voici les différents types de permissions que vous pouvez demander

Privilèges Signification
!UniversalBrowserRead permet d'utiliser l'Api d'accés aux données "sensibles"
!UniversalBrowserWrite permet d'utiliser l'api de modification des données "sensibles"
UniversalXPConnect Permet d'utiliser tous les objets XPcom
!UniversalPreferencesRead permet de lire les préférences via navigator.preference
!UniversalPreferencesWrite permet de modifier les préférences via navigator.preference
!CapabilityPreferencesAccess permet d'accéder aux préférences qui définissent la politique de sécurité (il faut aussi demander !UniversalPreferencesRead/Write)
!UniversalFileRead permet d'ouvrir des fichiers locaux dans une fenêtre, effectuer de l'upload à partir du disque de l'utilisateur en utilisant la balise <input type="file">.

Liens externes


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.