Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
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'unetechnologie expérimentale.
Vérifiez attentivement letableau de compatibilité des navigateurs avant de l'utiliser en production.
L'en-tête de réponse HTTPPermissions-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 principalPolitique d'autorisations.
| Type d'en-tête | En-tête de réponse |
|---|
Dans cet article
Syntaxe
Permissions-Policy: <directive>=<allowlist><directive>La directive de la politique d'autorisations à laquelle appliquer la liste d'autorisations
allowlist. VoirDirectives 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'.selfLa 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.srcLa 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 valeurpar 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érentespages 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érimentalContrô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érimentalContrô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érimentalNon standardContrôle si le document courant est autorisé à utiliser la méthode
ariaNotify()pour déclencher des annonces pourlecteur d'écran.attribution-reportingObsolèteContrôle si le document courant est autorisé à utiliserl'API Attribution Reporting.
autoplayExpérimentalContrô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érimentalContrôle si l'utilisation del'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èteNon standardContrô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érimentalContrô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érimentalContrôle si le document est autorisé à utiliserl'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érimentalContrô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érimentalContrôle l'accès àl'API Compute Pressure.
cross-origin-isolatedExpérimentalContrôle si le document courant peut être traité commeisolé d'origine croisée.
deferred-fetchExpérimentalContrôle l'allocation du quota
fetchLater()de l'origine principale.deferred-fetch-minimalExpérimentalContrôle l'allocation du quota partagé
fetchLater()pour les sous-cadres inter-origines.display-captureExpérimentalContrô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érimentalContrôle si le document courant est autorisé à utiliserl'API Encrypted Media Extensions (EME). Lorsque cette politique est désactivée, la
Promiseretournée parNavigator.requestMediaKeySystemAccess()sera rejetée avec une erreurSecurityErrorDOMException.fullscreenExpérimentalContrô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érimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrô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érimentalContrôle si le document courant est autorisé à recueillir des informations sur l'orientation de l'appareil via l'interface
Gyroscope.hidExpérimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrôle si le document courant est autorisé à utiliserl'API Federated Credential Management (FedCM).
idle-detectionExpérimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrôle l'accès à la fonctionnalité de détection de langue del'API Translator and Language Detector.
local-fontsExpérimentalContrôle si le document courant est autorisé à collecter des informations sur les polices installées localement via la méthode
Window.queryLocalFonts()(voir aussil'API Local Font Access).magnetometerExpérimentalContrôle si le document courant est autorisé à recueillir des informations sur l'orientation de l'appareil via l'interface
Magnetometer.microphoneExpérimentalContrô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érimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrôle l'accès à la fonctionnalité dereconnaissance vocale locale del'API Web Speech.
otp-credentialsExpérimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrôle si le document courant est autorisé à utiliserl'API Payment Request. Lorsque cette politique est désactivée, le constructeur
PaymentRequest()retournera uneSecurityErrorDOMException.picture-in-pictureExpérimentalContrô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érimentalContrôle l'utilisation des opérations de demande de jeton (
token-request) del'API Private State Token.private-state-token-redemptionExpérimentalContrôle l'utilisation des opérations
token-redemptionetsend-redemption-recorddel'API Private State Token.publickey-credentials-createExpérimentalContrôle si le document courant est autorisé à utiliserl'API Web Authentication pour créer de nouvelles informations d'identification asymétriques, par exemple via
navigator.credentials.create({publicKey: ..., ...}).publickey-credentials-getExpérimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrôle si le document courant est autorisé à utiliserl'API Screen Wake Lock pour indiquer que l'appareil ne doit pas s'éteindre ou diminuer la luminosité de l'écran.
serialExpérimentalContrôle si le document courant est autorisé à utiliserl'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érimentalContrôle si le document courant est autorisé à utiliserl'API Audio Output Devices pour lister et sélectionner des haut-parleurs.
storage-accessExpérimentalContrôle si un document chargé dans un contexte tiers (c.-à-d. intégré dans un
<iframe>) est autorisé à utiliserl'API Storage Access pour demander l'accès aux cookies non partitionnés.translatorExpérimentalContrôle l'accès à la fonctionnalité de traductiondes API Translator and Language Detector.
summarizerExpérimentalContrôle l'accès àl'API Summarizer.
usbExpérimentalContrôle si le document courant est autorisé à utiliserl'API WebUSB.
web-shareExpérimentalContrôle si le document courant est autorisé à utiliser
Navigator.share()del'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érimentalContrôle si le document courant est autorisé à utiliserl'API Window Management pour gérer des fenêtres sur plusieurs écrans.
xr-spatial-trackingExpérimentalContrôle si le document courant est autorisé à utiliserl'API WebXR Device pour interagir avec une session WebXR.
Exemples
>Utilisation simple
En-têtePermissions-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 cecomportement 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'attributallow, 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'attributallow.
<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 valeursrc. 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 attributsrc. Cette valeur est levaleur par défaut de la liste d'autorisation pour les fonctionnalités listées dansallow, 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 exempleMediaDevices.getUserMedia()) etGeolocation 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 domainehttps://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