HTTPQUERY
Español

Permissions-Policy

Uso

La cabecera de respuesta Permissions-Policy restringe qué funciones del navegador se permiten en el marco actual. Cada política empareja una directiva de función con una lista de permitidos que define qué orígenes acceden a esa función.

Permissions-Policy: <directive>=<allowlist>

Nota

Una política inicial recomendada desactiva las funciones que el sitio no usa: Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), bluetooth=(). Los escáneres de seguridad señalan la ausencia de la cabecera Permissions-Policy. Establecer una política mínima resuelve el hallazgo sin afectar a la funcionalidad del sitio.

Nota

El mecanismo Permissions-Policy se conocía anteriormente como Feature Policy.

Directivas

El nombre de la directiva identifica la función del navegador que se desea controlar. Una lista no exhaustiva de directivas estandarizadas:

Nota

La directiva interest-cohort se usaba para bloquear Federated Learning of Cohorts (FLoC). Google abandonó FLoC en 2022 y sustituyó esa API por la Topics API. La directiva interest-cohort se ha eliminado de las implementaciones de los navegadores.

Valores de la lista de permitidos

El controla qué orígenes usan la función:

Nota

La directiva unload bloquea los manejadores del evento unload para el origen. Establecer Permissions-Policy: unload=() impide que el código propio, los scripts de terceros y las extensiones del navegador registren manejadores de unload. Esto es relevante para el rendimiento de la caché de retroceso y avance (bfcache), porque los manejadores de unload impiden que el navegador almacene en caché las páginas para una navegación instantánea hacia atrás y hacia delante. Chrome está dejando obsoletos los eventos unload de forma gradual, empezando por los sitios de mucho tráfico y extendiéndose a todos los sitios. Establecer unload=() se adhiere de inmediato a esa obsolescencia y garantiza la elegibilidad para bfcache con independencia del calendario de despliegue.

Ejemplo

En el siguiente ejemplo, el servidor indica que la función geolocation debe estar desactivada en todos los contextos.

Permissions-Policy: geolocation=()

En el siguiente ejemplo, el servidor indica que la función encrypted-media debe estar desactivada para todos los orígenes salvo para report.example.re.

Permissions-Policy: encrypted-media=("https://report.example.re")

En el siguiente ejemplo, el servidor indica que la función microphone debe estar desactivada para todos los orígenes salvo para sí mismo y para aquellos con origen example.re.

Permissions-Policy: microphone=(self "https://example.re")

Bloquear los manejadores de unload para mejorar la elegibilidad para bfcache. Esto impide que los scripts de terceros y las extensiones registren eventos unload que degradan el rendimiento de la navegación hacia atrás y hacia delante.

Permissions-Policy: unload=()

Diagnóstico

Las infracciones de Permissions-Policy se producen de forma silenciosa en la mayoría de los casos: la función bloqueada devuelve un estado denegado o lanza un error sin que aparezca ningún aviso visible del navegador.

Función bloqueada en un iframe por falta del atributo allow. Aunque la página padre permita una función, los iframes incrustados necesitan un atributo allow explícito para acceder a ella. Añada el atributo a la etiqueta iframe:

Geolocation, camera o microphone no funcionan tras establecer la política. Una política como Permissions-Policy: geolocation=() desactiva la función para todos los orígenes, incluida la propia página. Para permitir la función solo en el mismo origen, use geolocation=(self). Para permitir además un origen incrustado concreto, use geolocation=(self “https://maps.example.re”). El navegador nunca pregunta al usuario por una función que la política ya ha denegado.

El comodín * no funciona para todas las funciones. Algunas funciones no admiten el valor * en la lista de permitidos y se limitan a listas de orígenes explícitas. Cuando * no surte efecto, especifique cada origen permitido de forma individual. Revise la consola del navegador en busca de advertencias sobre valores de lista de permitidos no reconocidos o no admitidos.

Migración de Feature-Policy a Permissions-Policy. La cabecera heredada Feature-Policy usa una sintaxis distinta: Feature-Policy: geolocation ‘self’ frente a Permissions-Policy: geolocation=(self). Los navegadores compatibles con Permissions-Policy ignoran Feature-Policy cuando ambas cabeceras están presentes. Actualice el nombre de la cabecera y convierta la sintaxis: sustituya los espacios por =, encierre las listas de orígenes entre paréntesis y elimine las comillas simples alrededor de self y none (use () en lugar de ‘none’).

Depuración con document.featurePolicy.allowsFeature(). En los navegadores basados en Chromium, abra la consola de DevTools y ejecute document.featurePolicy.allowsFeature(‘camera’) para comprobar si una función está permitida en el contexto actual. Devuelve true o false. Para contextos de iframe, pase el origen como segundo argumento: document.featurePolicy.allowsFeature(‘camera’, ‘https://embed.example.re’). Firefox usa document.permissionsPolicy en lugar de document.featurePolicy.