Permissions-Policy : restreindre l’accès aux API du navigateur
Les navigateurs modernes exposent des fonctionnalités très puissantes : caméra, microphone, géolocalisation, capteurs de mouvement, accès USB, paiement intégré… Votre site n'en utilise sans doute qu'une poignée, voire aucune. Pourtant, par défaut, ces API restent accessibles à tout code qui s'exécute sur vos pages — y compris les scripts tiers et les iframes que vous n'avez pas écrits.
L'en-tête Permissions-Policy (anciennement Feature-Policy) vous permet de déclarer explicitement quelles fonctionnalités sont autorisées, et pour qui. Tout ce que vous ne déclarez pas peut être verrouillé. C'est une réduction de surface d'attaque simple, sans impact sur les performances, et un signal de sérieux apprécié des auditeurs.
Pourquoi restreindre ces API
Si une page de votre site est compromise — script injecté via une faille XSS, dépendance JavaScript piégée, iframe publicitaire malveillante — le code hostile pourrait tenter de déclencher la caméra, le micro ou de relever la position du visiteur. En déclarant que votre site n'utilise pas ces fonctions, vous les verrouillez pour tout le monde, attaquant compris, avant même qu'une faille soit exploitée.
Le principe directeur est celui du moindre privilège : désactivez tout ce dont vous n'avez pas besoin, et n'autorisez que le strict nécessaire, restreint à votre propre origine. Une fonctionnalité indisponible ne peut pas être détournée.
Comprendre la syntaxe
Chaque fonctionnalité se règle sous la forme nom=(liste-des-origines). Une liste vide () désactive totalement la fonction, pour tout le monde. (self) l'autorise uniquement à votre propre site. Vous pouvez aussi lister des domaines précis, par exemple camera=(self "https://visio.partenaire.com").
Le piège de débutant : (self) avec les parenthèses désactive pour les tiers tout en gardant la fonction pour vous, tandis que () tout court coupe la fonction même pour votre site. Choisissez en fonction de ce que vos pages utilisent réellement.
Exemple prêt à adapter
Cet exemple désactive les fonctions les plus sensibles que la plupart des sites n'utilisent pas. Retirez de la liste celles dont vous avez besoin et passez-les à (self).
<IfModule mod_headers.c>
Header always set Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=(), usb=(), accelerometer=(), gyroscope=()"
</IfModule>add_header Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=(), usb=(), accelerometer=(), gyroscope=()" always;add_action('send_headers', function () {
header('Permissions-Policy: geolocation=(), camera=(), microphone=(), payment=(), usb=()');
});Vérifier et éviter les régressions
Après déploiement, relancez un audit CheckCyber ou ouvrez l'onglet Réseau du navigateur pour confirmer la présence de l'en-tête. Si une fonctionnalité légitime cesse de marcher (une carte qui ne géolocalise plus, une visio sans caméra), la console du navigateur affiche un message explicite indiquant la permission bloquée : il suffit alors de passer la fonction concernée de () à (self).
Important : la Permissions-Policy s'applique aussi aux iframes que vous intégrez. Si vous incorporez un service tiers qui a besoin d'une caméra ou d'un micro (visioconférence, paiement), pensez à autoriser explicitement son domaine, sinon le widget ne fonctionnera pas.
[ FAQ // QUESTIONS FRÉQUENTES ]
▸Et si mon site a besoin de la géolocalisation ?
Autorisez-la uniquement à votre origine : geolocation=(self). Vous conservez la fonction pour vos propres pages tout en la refusant aux iframes et scripts tiers. Le même principe vaut pour la caméra, le micro, etc.
▸Quelle différence avec Feature-Policy ?
Permissions-Policy est le successeur normalisé de Feature-Policy, avec une syntaxe différente (nom=(origines) au lieu de nom 'self'). Feature-Policy est obsolète : utilisez uniquement Permissions-Policy, que tous les navigateurs récents comprennent.
▸Cet en-tête peut-il casser mon site ?
Seulement si vous désactivez une fonction que vos pages utilisent vraiment. Commencez par bloquer ce que vous n'employez manifestement pas (USB, paiement, capteurs), testez, puis affinez. La console du navigateur signale clairement toute permission refusée.
[ PASSEZ À L’ACTION ]
Votre site est-il concerné ?
Lancez un audit de surface gratuit et obtenez en quelques secondes la liste exacte de vos failles, avec le correctif pour chacune. Anonyme, sans inscription.
▶ Auditer mon site[ À LIRE AUSSI ]
[ CheckCyber // MIS À JOUR LE 2026-06-29 ]