Feature Policy

Feature Policy ("reglementation des fonctionnalites" en francais) permet aux developpeurs web d'activer, de modifier ou de desactiver specifiquement le comportement de certaines fonctionnalites et API dans le navigateur. Elle est similaire a Content Security Policy mais controle les fonctionnalites plus que la securite.

Note : L'en-tete Feature-Policy a maintenant ete renomme Permissions-Policy dans la specification, et cet article va possiblement etre modifie en consequence.

En resume

Feature Policy est un mecanisme vous permettant de declarer explicitement quelles fonctionnalites sont utilisees ou non par votre site web. Ceci vous permet donc de mettre en place des bonnes pratiques en limitant les fonctionnalites disponibles, et ce bien que votre code source evoluera avec le temps et que du contenu externe puisse etre integre posterieurement et plus sainement.

Avec Feature Policy, vous pouvez opter pour un ensemble de "regles" que le navigateur imposera a certaines fonctionnalites utilisees sur un site web. Ces regles restreignent quelles API le site peut utiliser ou comment il peut modifier le comportement par defaut du navigateur pour utiliser certaines fonctionnalites.

Par exemple, voici des choses que vous pourrez faire avec Feature Policy :

  • Changer le comportement par defaut de la lecture automatique sur mobile ou pour les videos de source externe,
  • Vous interdire d'utiliser les API sensitives comme l'appareil photographique ou le microphone.
  • Permettre aux iframes d'utiliser l' API plein ecran .
  • Empecher l'utilisateur d'API obsoletes comme les XHR synchrones ou document.write() .
  • Vous assurer que les images sont dimensionnees correctement et ne sont pas trop grosses pour le cadre de la fenetre.

Concepts et utilisation

Feature Policy vous permet de controler quelles origines peuvent utiliser quelles fonctionnalites, a la fois au niveau superieur de navigation et dans cadres embarques. Essentiellement, vous devez ecrire une regle qui fournit une liste d'origines permises pour chaque fonctionnalite. Celles controlees par Feature Policy ne seront activees que dans les documents ou cadres si leur origine respective est presente dans la liste de permissions associee a cette fonctionnalite.

Pour chaque fonctionnalites controlee, le navigateurs entretient une liste d'origines (dite "liste de permissions" ou allowlist ) pour lesquelles la fonctionnalite est activee. Si vous ne specifiez aucune regle pour une fonctionnalite, alors la liste de permissions par defaut sera utilisee. Celle-ci est specifique a chaque fonctionnalite.

Ecrire une regle

Une regle est composee d'un ensemble de directives individuelles. Chaque directive est une combinaison d'un nom de fonctionnalites et d'une liste de permissions pour les origines qui pourront utiliser la fonctionnalite.

Appliquer votre regle

Feature Policy fournit deux manieres d'appliquer des regles pour controler les fonctionnalites :

La principale difference entre les deux est que que l'attribut ne controle les fonctionnalites que dans l'iframe tandis que l'en-tete les controle dans la reponse et chacun des contenus imbriques dans la page.

Pour plus de details, voir Utiliser Feature Policy .

Determiner la regle

Les scripts peuvent demander programmatiquement a savoir quelles regles s'appliquent au moyen de l'objet FeaturePolicy avec Document.featurePolicy ou HTMLIFrameElement.featurePolicy .

Types de fonctionnalites controlables

Bien que Feature Policy fournit un moyen de controler de multiples fonctionnalites en utilisant une syntaxe constante, le comportement des fonctionnalties controlees varie et depend de plusieurs facteurs.

Le principe general est qu'il devrait y avoir un moyen intuitif et fiable pour les developpeurs web de savoir quand une fonctionnalite dont ils ont besoin est desactivee. Les fonctionnalites recemment introduites peuvent fournir une API explicitement concue pour signaler un tel cas, mais celles preexistantes et qui ont integre tardivement Feature Policy utilisent typiquement des mecanismes plus anciens, par exemple :

  • Retourner "permission denied" pour les API JavaScript qui requierent une elevation de privileges de la part de l'utilisateur,
  • Retourner false ou jeter une erreur depuis une API JavaScript qui permet d'acceder a une fonctionnalite,
  • Modifier les valeurs par defaut ou les options qui controlent le comportement de la fonctionnalite.

L'ensemble actuel des fonctionnalites controlables se resume donc a deux grandes categories :

  • Imposer des bonnes pratiques pour une bonne experience d'utilisation,
  • Fournir un controle granulaire sur les fonctionnalites sensitives ou puissantes.

Bonnes pratiques pour une bonne experience d'utilisation

Il y a plusieurs fonctionnalites controlables pour vous aider a mettre en place de bonnes pratiques afin d'assurer de bonnes performances et une experience d'utilisation agreable.

Dans la plupart des cas, les fonctionnalites controlables sont celles qui, si utilisees, vont affecter negativement l'experience d'utilisation. Pour eviter de faire dysfonctionner un site web deja existant, ces fonctionnalites autorisent par defaut leur usage par toutes les origines. Une bonne pratique est donc d'utiliser des regles qui desactivent ces fonctionnalites pour certaines origines.

La liste de ces fonctionnalites est :

  • Animations de rafraichissement de l'affichage,
  • Formats d'image du passe,
  • Images surdimensionnees,
  • Scripts synchrones,
  • Requetes XMLHTTPRequest sychrones,
  • Images non optimisees,
  • Medias non dimensionnes.

Controle granulaire sur certaines fonctionnalites

Le web fournit des fonctionnalites et API que peuvent affecter l'anonymat, la vie privee et la securite si leur usage est abusif. Dans certains cas, vous pourriez avoir envie de limiter strictement la maniere dont de telles fonctionnalites sont utilisees sur un site web. Il y a des moyens de permettre a des fonctionnalites d'etre activees ou desactivees pour des origines ou des cadres specifiques dans un site web. Quand ils sont disponibles, les moyens integrent avec l'API Permissions ou des mecanismes propres a eux-memes la possibilite de verifier si la fonctionnalite est disponible.

Les fonctionnalites incluent (voir la liste des Features ) :

  • Accelerometre
  • Capteur de luminosite ambiante
  • Lecture automatique
  • Appareil photographique
  • Medias chiffres
  • Plein ecran
  • Geolocalisation
  • Gyroscope
  • Magnetometre
  • Microphone
  • MIDI
  • PaymentRequest
  • Picture-in-picture
  • USB
  • Web Share API
  • VR / XR

Exemples

Specifications

Specification
Permissions Policy
# permissions-policy-http-header-field

Compatibilite des navigateurs

BCD tables only load in the browser

Voir aussi