En-tête Permissions-Policy
Limited availability
Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.
Expérimental: Il s'agit d'une technologie expérimentale.
Vérifiez attentivement le tableau de compatibilité des navigateurs avant de l'utiliser en production.
L'en-tête de réponse HTTP Permissions-Policy fournit un mécanisme pour autoriser ou refuser l'utilisation de fonctionnalités du navigateur dans un document ou dans tout élément HTML <iframe> du document.
Pour plus d'informations, consultez l'article principal Politique d'autorisations.
| Type d'en-tête | En-tête de réponse |
|---|
Syntaxe
Permissions-Policy: <directive>=<allowlist>
<directive>-
La directive de la politique d'autorisations à laquelle appliquer la liste d'autorisations
allowlist. Voir Directives ci-dessous pour la liste des noms de directives autorisés. <allowlist>-
Une liste d'autorisations est une liste d'origines qui prend une ou plusieurs des valeurs suivantes, contenues entre parenthèses et séparées par des espaces :
*(joker)-
La fonctionnalité sera autorisée dans ce document, ainsi que dans tous les contextes de navigation imbriqués (
<iframe>) quelle que soit leur origine. ()(liste d'autorisations vide)-
La fonctionnalité est désactivée dans les contextes de navigation principaux et imbriqués. L'équivalent pour l'attribut
allowd'un<iframe>est'none'. self-
La fonctionnalité sera autorisée dans ce document, ainsi que dans tous les contextes de navigation imbriqués (
<iframe>) de même origine uniquement. La fonctionnalité n'est pas autorisée dans les documents d'origine croisée dans les contextes imbriqués.selfpeut être considéré comme un raccourci pourhttps://votre-site.exemple.com. L'équivalent pour l'attributallowd'un<iframe>estself. src-
La fonctionnalité sera autorisée dans ce
<iframe>, tant que le document chargé provient de la même origine que l'URL de son attributsrc. Cette valeur n'est utilisée que dans l'attributallowd'un<iframe>, et est la valeur par défaut deallowlistdans les<iframe>. "<origin>"-
La fonctionnalité est autorisée pour des origines spécifiques (par exemple,
"https://a.exemple.com"). Les origines doivent être séparées par des espaces. Notez que les origines dans les attributsallowde<iframe>ne sont pas entre guillemets.
Les valeurs
*et()ne peuvent être utilisées qu'isolément, tandis queselfetsrcpeuvent être utilisées en combinaison avec une ou plusieurs origines.Note : Les directives ont une liste d'autorisations par défaut, qui est toujours l'une de
*,selfounonepour l'en-tête HTTPPermissions-Policy, et détermine le comportement par défaut si elles ne sont pas explicitement listées dans une politique. Celles-ci sont précisées sur les différentes pages de référence des directives. Pour les attributsallowde<iframe>, le comportement par défaut est toujourssrc.
Lorsque cela est pris en charge, vous pouvez inclure des jokers dans les origines de la politique d'autorisations. Cela signifie qu'au lieu de devoir définir explicitement plusieurs sous-domaines différents dans une liste d'autorisations, vous pouvez tous les définir en une seule origine avec un joker.
Ainsi, au lieu de
("https://exemple.com" "https://a.exemple.com" "https://b.exemple.com" "https://c.exemple.com")
Vous pouvez définir
("https://exemple.com" "https://*.exemple.com")
Note :
"https://*.exemple.com" ne correspond pas à "https://exemple.com".
Directives
accelerometerExpérimental-
Contrôle si le document courant est autorisé à recueillir des informations à propos de l'accélération de l'appareil au moyen de l'interface
Accelerometer. ambient-light-sensorExpérimental-
Contrôle si le document courant est autorisé à recueillir des informations à propos de la luminosité ambiante de l'appareil au moyen de l'interface
AmbientLightSensor. aria-notifyExpérimental Non standard-
Contrôle si le document courant est autorisé à utiliser la méthode
ariaNotify()pour déclencher des annonces pour lecteur d'écran. attribution-reportingObsolète-
Contrôle si le document courant est autorisé à utiliser l'API Attribution Reporting.
autoplayExpérimental-
Contrôle si le document courant est autorisé à lire automatiquement des médias demandés via l'interface
HTMLMediaElement. Lorsque cette politique est désactivée et qu'il n'y a pas eu de geste de la part de l'utilisateur·ice, laPromiseretournée parHTMLMediaElement.play()sera rejetée avec une erreurNotAllowedErrorDOMException. L'attribut autoplay sur les éléments HTML<audio>et<video>sera ignoré. bluetoothExpérimental-
Contrôle si l'utilisation de l'API Web Bluetooth est autorisée. Lorsque cette politique est désactivée, les méthodes de l'objet
Bluetoothretourné parNavigator.bluetoothretourneront soitfalse, soit rejeteront laPromiseretournée avec une erreurSecurityErrorDOMException. browsing-topicsObsolète Non standard-
Contrôle l'accès à l'API Topics. Lorsqu'une politique interdit explicitement l'utilisation de l'API Topics, toute tentative d'appel à la méthode
Document.browsingTopics()ou d'envoi d'une requête avec un en-têteSec-Browsing-Topicséchouera avec une erreurNotAllowedErrorDOMException. cameraExpérimental-
Contrôle si le document courant est autorisé à utiliser des dispositifs d'entrée vidéo. La
Promiseretournée pargetUserMedia()sera rejetée avec une erreurNotAllowedErrorDOMExceptionsi l'autorisation n'est pas accordée. captured-surface-controlExpérimental-
Contrôle si le document est autorisé à utiliser l'API Captured Surface Control. La promesse retournée par les principales méthodes de l'API sera rejetée avec une erreur
NotAllowedErrorDOMExceptionsi l'autorisation n'est pas accordée. ch-ua-high-entropy-valuesExpérimental-
Contrôle si le document est autorisé à utiliser la méthode
NavigatorUAData.getHighEntropyValues()pour récupérer des données de user-agent à haute entropie. Si l'autorisation n'est pas accordée, la méthode ne retourne que les données à faible entropiebrands,mobileetplatform. compute-pressureExpérimental-
Contrôle l'accès à l'API Compute Pressure.
cross-origin-isolatedExpérimental-
Contrôle si le document courant peut être traité comme isolé d'origine croisée.
deferred-fetchExpérimental-
Contrôle l'allocation du quota
fetchLater()de l'origine principale. deferred-fetch-minimalExpérimental-
Contrôle l'allocation du quota partagé
fetchLater()pour les sous-cadres inter-origines. display-captureExpérimental-
Contrôle si le document courant est autorisé à utiliser la méthode
getDisplayMedia()pour capturer le contenu de l'écran. Lorsque cette politique est désactivée, la promesse retournée pargetDisplayMedia()sera rejetée avec une erreurNotAllowedErrorDOMExceptionsi l'autorisation de capturer l'écran n'est pas obtenue. encrypted-mediaExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Encrypted Media Extensions (EME). Lorsque cette politique est désactivée, la
Promiseretournée parNavigator.requestMediaKeySystemAccess()sera rejetée avec une erreurSecurityErrorDOMException. fullscreenExpérimental-
Contrôle si le document courant est autorisé à utiliser
Element.requestFullscreen(). Lorsque cette politique est désactivée, laPromiseretournée est rejetée avec uneTypeError. gamepadExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Gamepad. Lorsque cette politique est désactivée, les appels à
Navigator.getGamepads()lèveront uneSecurityErrorDOMException, et les évènementsgamepadconnectedetgamepaddisconnectedne seront pas déclenchés. geolocationExpérimental-
Contrôle si le document courant est autorisé à utiliser l'interface
Geolocation. Lorsque cette politique est désactivée, les appels àgetCurrentPosition()etwatchPosition()provoqueront l'invocation des callbacks avec un code d'erreurGeolocationPositionErrorPERMISSION_DENIED. gyroscopeExpérimental-
Contrôle si le document courant est autorisé à recueillir des informations sur l'orientation de l'appareil via l'interface
Gyroscope. hidExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API WebHID pour se connecter à des périphériques d'interface humaine peu courants ou exotiques, comme des claviers alternatifs ou des manettes.
identity-credentials-getExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Federated Credential Management (FedCM).
idle-detectionExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Idle Detection pour détecter les interactions des utilisatrices et utilisateurs avec leurs appareils, par exemple pour indiquer l'état « disponible »/« absent » dans des applications de chat.
language-detectorExpérimental-
Contrôle l'accès à la fonctionnalité de détection de langue de l'API Translator and Language Detector.
local-fontsExpérimental-
Contrôle si le document courant est autorisé à collecter des informations sur les polices installées localement via la méthode
Window.queryLocalFonts()(voir aussi l'API Local Font Access). magnetometerExpérimental-
Contrôle si le document courant est autorisé à recueillir des informations sur l'orientation de l'appareil via l'interface
Magnetometer. microphoneExpérimental-
Contrôle si le document courant est autorisé à utiliser des dispositifs d'entrée audio. Lorsque cette politique est désactivée, la
Promiseretournée parMediaDevices.getUserMedia()sera rejetée avec une erreurNotAllowedErrorDOMException. midiExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Web MIDI. Lorsque cette politique est désactivée, la promesse (
Promise) retournée parNavigator.requestMIDIAccess()sera rejetée avec une erreurSecurityErrorDOMException. on-device-speech-recognitionExpérimental-
Contrôle l'accès à la fonctionnalité de reconnaissance vocale locale de l'API Web Speech.
otp-credentialsExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API WebOTP pour demander un mot de passe à usage unique (OTP) depuis un SMS au format spécial envoyé par le serveur de l'application, via
navigator.credentials.get({otp: ..., ...}). paymentExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Payment Request. Lorsque cette politique est désactivée, le constructeur
PaymentRequest()retournera uneSecurityErrorDOMException. picture-in-pictureExpérimental-
Contrôle si le document courant est autorisé à lire une vidéo en mode Image dans l'image via l'API correspondante.
private-state-token-issuanceExpérimental-
Contrôle l'utilisation des opérations de demande de jeton (
token-request) de l'API Private State Token. private-state-token-redemptionExpérimental-
Contrôle l'utilisation des opérations
token-redemptionetsend-redemption-recordde l'API Private State Token. publickey-credentials-createExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Web Authentication pour créer de nouvelles informations d'identification asymétriques, par exemple via
navigator.credentials.create({publicKey: ..., ...}). publickey-credentials-getExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Web Authentication pour récupérer des informations d'identification par clé publique déjà stockées, par exemple via
navigator.credentials.get({publicKey: ..., ...}). screen-wake-lockExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Screen Wake Lock pour indiquer que l'appareil ne doit pas s'éteindre ou diminuer la luminosité de l'écran.
serialExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Web Serial pour communiquer avec des dispositifs série, soit connectés directement via un port série, soit via des dispositifs USB ou Bluetooth émulant un port série.
speaker-selectionExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Audio Output Devices pour lister et sélectionner des haut-parleurs.
storage-accessExpérimental-
Contrôle si un document chargé dans un contexte tiers (c.-à-d. intégré dans un
<iframe>) est autorisé à utiliser l'API Storage Access pour demander l'accès aux cookies non partitionnés. translatorExpérimental-
Contrôle l'accès à la fonctionnalité de traduction des API Translator and Language Detector.
summarizerExpérimental-
Contrôle l'accès à l'API Summarizer.
usbExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API WebUSB.
-
Contrôle si le document courant est autorisé à utiliser
Navigator.share()de l'API Web Share pour partager du texte, des liens, des images et d'autres contenus vers des destinations arbitraires choisies par l'utilisateur·ice (par exemple, des applications mobiles). window-managementExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API Window Management pour gérer des fenêtres sur plusieurs écrans.
xr-spatial-trackingExpérimental-
Contrôle si le document courant est autorisé à utiliser l'API WebXR Device pour interagir avec une session WebXR.
Exemples
>Utilisation simple
En-tête Permissions-Policy
Pour autoriser tous les domaines à accéder à la géolocalisation :
Permissions-Policy: geolocation=*
Pour autoriser l'accès à une partie des domaines :
Permissions-Policy: geolocation=(self "https://a.exemple.com" "https://b.exemple.com")
Plusieurs fonctionnalités peuvent être contrôlées en même temps en envoyant l'en-tête avec une liste de politiques séparées par des virgules, ou en envoyant un en-tête distinct pour chaque politique.
Par exemple, les exemples suivants sont équivalents :
Permissions-Policy: picture-in-picture=(), geolocation=(self https://exemple.com/), camera=*
Permissions-Policy: picture-in-picture=()
Permissions-Policy: geolocation=(self https://exemple.com/)
Permissions-Policy: camera=*
Cadres intégrés
Pour qu'une fonctionnalité soit activée dans un <iframe>, son domaine autorisé doit aussi être présent dans la liste d'autorisation de la page parente. En raison de ce comportement d'héritage, il est conseillé de définir le support le plus large possible pour une fonctionnalité dans l'en-tête HTTP, puis de définir le sous-ensemble de support nécessaire dans chaque <iframe>.
Pour autoriser tous les domaines à accéder à la géolocalisation :
<iframe src="https://exemple.com" allow="geolocation *"></iframe>
Pour appliquer une politique au domaine courant et à d'autres :
<iframe
src="https://exemple.com"
allow="geolocation 'self' https://a.exemple.com https://b.exemple.com"></iframe>
Important : Par défaut, si un <iframe> navigue vers un autre domaine, la politique n'est pas appliquée au domaine vers lequel l'<iframe> navigue. En listant le domaine cible dans l'attribut allow, la politique de permissions appliquée à l'<iframe> d'origine sera appliquée au domaine cible.
Plusieurs fonctionnalités peuvent être contrôlées en même temps en incluant une liste de directives de politique séparées par des points-virgules dans l'attribut allow.
<iframe
src="https://exemple.com"
allow="geolocation 'self' https://a.exemple.com https://b.exemple.com; fullscreen 'none'"></iframe>
Il est utile de mentionner la valeur src. Comme indiqué plus haut, utiliser cette valeur dans la liste d'autorisation signifie que la fonctionnalité associée sera autorisée dans cet <iframe>, tant que le document chargé provient du même domaine que l'URL dans son attribut src. Cette valeur est le valeur par défaut de la liste d'autorisation pour les fonctionnalités listées dans allow, donc les exemples suivants sont équivalents :
<iframe src="https://exemple.com" allow="geolocation 'src'"></iframe>
<iframe src="https://exemple.com" allow="geolocation"></iframe>
Refuser l'accès aux fonctionnalités puissantes
La société SecureCorp Inc. souhaite désactiver les API Microphone (par exemple MediaDevices.getUserMedia()) et Geolocation dans son application. Elle peut le faire en utilisant l'en-tête de réponse suivant :
Permissions-Policy: microphone=(), geolocation=()
En définissant () pour la liste des domaines, les fonctionnalités indiquées seront désactivées pour tous les contextes de navigation (y compris tous les <iframe>), quel que soit leur domaine.
Combiner l'en-tête HTTP et les politiques de <iframe>
Par exemple, supposons que vous souhaitez activer la géolocalisation sur votre propre domaine, ainsi que dans du contenu embarqué provenant de votre réseau publicitaire de confiance. Vous pouvez définir la politique de permissions globale de la page ainsi :
Permissions-Policy: geolocation=(self https://trusted-ad-network.com)
Dans vos <iframe> publicitaires, vous pouvez autoriser l'accès au domaine https://trusted-ad-network.com ainsi :
<iframe src="https://trusted-ad-network.com" allow="geolocation"></iframe>
Si un autre domaine est chargé dans l'<iframe>, il n'aura pas accès à la géolocalisation :
<iframe src="https://rogue-origin-exemple.com" allow="geolocation"></iframe>
Spécifications
| Specification |
|---|
| Permissions Policy> # permissions-policy-http-header-field> |
Compatibilité des navigateurs
Voir aussi
- Politique de permissions
- La propriété
Document.featurePolicyet l'interfaceFeaturePolicy - L'en-tête
Content-Security-Policy - L'en-tête
Referrer-Policy