Permissions-Policy: camera e geolocalizzazione (non il banner cookie)
Data Pubblicazione: 22/09/2026 | | Sicurezza

Permissions-Policy: camera e geolocalizzazione (non il banner cookie)

Permissions-Policy è un header di risposta. Dice quali funzioni — camera, microfono, geolocalizzazione — la pagina e gli iframe possono usare. camera=() le spegne. Non è più Feature-Policy. Il banner cookie non lo imposta. MDN lo marca sperimentale.

Il banner cookie non scrive l’header Permissions-Policy. Permissions-Policy è un header di risposta con cui il server dice al browser quali API e funzioni della pagina — camera, microfono, geolocalizzazione, autoplay — sono permesse nel documento e negli iframe. MDN lo marca sperimentale, non Baseline. Non è il consenso al marketing. Non è più Feature-Policy: il nome è cambiato, la sintassi HTTP anche.

In breve: header di risposta. Sintassi Permissions-Policy: camera=(), geolocation=(). Lista vuota: funzione spenta. self: solo same-origin. *: tutti. L’attributo allow sull’iframe è un altro piano, default src. Il vecchio header si chiamava Feature-Policy e usava apici, non le parentesi. Verifica del 22 settembre 2026 su MDN.

Cosa trovi in questo articolo

  1. Cosa è Permissions-Policy (e cosa non è il banner)

  2. Allowlist: vuota, self, origini

  3. Header, iframe allow, Feature-Policy

  4. Errori da evitare

  5. In sintesi

Cosa è Permissions-Policy (e cosa non è il banner)

MDN, sulla guida Permissions Policy e sull’header Permissions-Policy, parte da un fatto: lo sviluppatore dichiara quali funzioni il codice del sito — e il contenuto di terzi negli iframe — può usare. Esempi elencati da MDN: cambiare l’autoplay su mobile e sui video di terzi; limitare camera, microfono, altoparlanti; permettere a un iframe la Fullscreen API; non far eseguire script a elementi fuori dal viewport. Non è un testo in pagina. È un header di risposta. MDN: sperimentale, disponibilità limitata, non Baseline. Prima di produzione si legge la tabella di compatibilità.

Non è la CSP. MDN lo dice: Permissions Policy è simile alla CSP, ma controlla le funzioni, non il comportamento di sicurezza (script, origini, frame). Non è CORS: CORS decide chi può leggere una risposta. Non è Referrer-Policy: Referrer-Policy decide cosa della URL esce. Non è il cookie SameSite. Il banner che chiede il marketing non spegne getUserMedia(). Quattro header, un popup, cinque mestieri.

Questo pezzo sta nel cluster Sicurezza, accanto alla CSP e a Referrer-Policy. La CSP limita cosa la pagina può eseguire. Permissions-Policy limita quali API può chiamare. Due piani, due header.

Allowlist: vuota, self, origini

MDN, pagina dell’header, sintassi: una o più direttive separate da virgola, ciascuna con una allowlist tra parentesi. Opzionale, per direttiva, report-to=<endpoint>, da mappare con Reporting-Endpoints.

AllowlistCosa permette MDN
() (vuota)funzione spenta nel documento e negli iframe. Sull’attributo allow dell’iframe l’equivalente è 'none'
selfpermessa nel documento e negli iframe same-origin. Non nei documenti cross-origin innestati. Equivalente iframe: self
*permessa in questo documento e in tutti gli iframe, qualunque origine. Va usata da sola
"https://a.example.com"origini nominate, tra virgolette, separate da spazio. Sull’attributo allow le origini non si virgolettano
srcsolo sull’attributo allow dell’iframe: permessa se il documento caricato ha la stessa origine dell’attributo src. È il default negli iframe

Esempio da produzione, se la pagina non deve usare camera né geolocalizzazione, nemmeno in un widget di terzi:

Permissions-Policy: camera=(), microphone=(), geolocation=()

MDN elenca le direttive una per una. camera: se la policy non la consente, la Promise di getUserMedia() rifiuta con NotAllowedError. autoplay: senza gesto dell’utente, HTMLMediaElement.play() rifiuta e l’attributo autoplay viene ignorato. Ogni direttiva ha un default proprio (*, self o none) se non la si elenca: sta sulla scheda di quella direttiva, non in un plugin «privacy pack».

Header, iframe allow, Feature-Policy

MDN: la policy si mette sulla risposta HTTP. In pagina, sugli iframe, resta l’attributo allow. Nota esplicita della guida: Permissions Policy si chiamava Feature Policy. Il nome è cambiato, la sintassi dell’header HTTP anche. L’attributo <iframe allow=" … "> è rimasto uguale. Chi copia Feature-Policy: camera 'none' su un header Permissions-Policy scrive una stringa che il browser nuovo non legge come la nuova grammatica.

Vecchia grammatica, apici: Feature-Policy: geolocation 'none'. Nuova grammatica, parentesi: Permissions-Policy: geolocation=(). Due header, due epoche. L’iframe, esempio MDN, usa ancora allow="camera 'src'; geolocation 'src'". Default sull’iframe, se manca allow: src. Non è il default dell’header.

Le violazioni, scrive MDN, si possono segnalare con la Reporting API, verso l’endpoint indicato da report-to o verso "default", e osservare in pagina con ReportingObserver. Si verifica sugli header della risposta, in staging, e tentando getUserMedia() o l’autoplay da un iframe di terzi. Non sul lucchetto della home. Non sul testo del banner. Il certificato TLS cifra il transito; non decide se la camera è accesa.

Errori da evitare

  • Lasciare il default e un widget di terzi con camera o geolocalizzazione: se la direttiva non è in header, vale il default di quella direttiva, non il testo del cookie.

  • Copiare Feature-Policy: camera 'none' e aspettarsi che Permissions-Policy la capisca: sintassi diversa, header diverso.

  • Trattare il banner cookie come Permissions-Policy: il consenso non scrive l’header.

  • Confondere Permissions-Policy con CSP, CORS o Referrer-Policy: tre header, tre mestieri, più questo.

  • Mettere * «per far funzionare il widget» e regalare camera e microfono a ogni iframe.

  • Fidarsi del plugin «GDPR pack» senza leggere Permissions-Policy sulla risposta e senza provare getUserMedia() da un iframe.

In sintesi

Permissions-Policy è un header di risposta. Dice quali funzioni il documento e gli iframe possono usare. camera=() spegne la camera. Non è Feature-Policy: nome e sintassi HTTP sono cambiati. Non è il banner cookie. MDN lo marca sperimentale: si legge la compatibilità prima di produzione. MDN, 22 settembre 2026.

Domande Frequenti

MDN: un header di risposta con cui il server dice al browser quali funzioni (camera, microfono, geolocalizzazione, autoplay, fullscreen…) il documento e gli iframe possono usare. Non è il banner cookie, non è CORS, non è la CSP. MDN lo marca sperimentale, non Baseline.
No. MDN: Permissions Policy si chiamava Feature Policy. Il nome è cambiato e anche la sintassi HTTP. Feature-Policy usava apici (camera 'none'). Permissions-Policy usa le parentesi (camera=()). L'attributo allow sugli iframe è rimasto uguale.
MDN: allowlist vuota. Permissions-Policy: camera=(), microphone=(), geolocation=(). Se la policy non consente camera, getUserMedia() rifiuta con NotAllowedError.
No. Il consenso è un testo in pagina. Permissions-Policy è un header di risposta, più l'attributo allow sugli iframe. Si verifica in Network e tentando le API, non sul testo del banner.
No. MDN: è simile alla CSP ma controlla le funzioni, non il comportamento di sicurezza (script, origini, frame). Due header, due mestieri. La CSP non spegne la camera; Permissions-Policy non blocca uno script inline.

Potrebbe interessarti anche...