Сеть
Permissions-Policy
Заголовок Permissions-Policy: какие функции браузера — камера, геолокация, оплата, датчики — доступны вашему сайту и встроенным iframe. С проверкой синтаксиса, импортом старого Feature-Policy и конфигом для серверов.
С чего начать
Импортировать готовый заголовок
Понимает и Permissions-Policy, и старый Feature-Policy с 'self' и 'none'.
Устройства
camera
Камера · по умолчанию только свой сайт
microphone
Микрофон · по умолчанию только свой сайт
geolocation
Геолокация · по умолчанию только свой сайт
display-capture
Захват экрана · по умолчанию только свой сайт
speaker-selection
Выбор динамика · по умолчанию только свой сайт
usb
WebUSB · по умолчанию только свой сайт
serial
Web Serial · по умолчанию только свой сайт
hid
WebHID · по умолчанию только свой сайт
bluetooth
Web Bluetooth · по умолчанию только свой сайт
midi
Web MIDI · по умолчанию только свой сайт
gamepad
Геймпад · по умолчанию только свой сайт
Датчики
accelerometer
Акселерометр · по умолчанию только свой сайт
gyroscope
Гироскоп · по умолчанию только свой сайт
magnetometer
Магнитометр · по умолчанию только свой сайт
ambient-light-sensor
Датчик освещённости · по умолчанию только свой сайт
xr-spatial-tracking
WebXR · по умолчанию только свой сайт
Данные и доступ
payment
Payment Request · по умолчанию только свой сайт
publickey-credentials-get
WebAuthn: вход · по умолчанию только свой сайт
publickey-credentials-create
WebAuthn: регистрация · по умолчанию только свой сайт
identity-credentials-get
FedCM · по умолчанию только свой сайт
otp-credentials
WebOTP (код из SMS) · по умолчанию только свой сайт
clipboard-read
Чтение буфера обмена · по умолчанию только свой сайт
clipboard-write
Запись в буфер обмена · по умолчанию только свой сайт
local-fonts
Список шрифтов системы · по умолчанию только свой сайт
storage-access
Storage Access API · по умолчанию всем
idle-detection
Idle Detection · по умолчанию только свой сайт
Реклама и приватность
browsing-topics
Topics API (реклама) · по умолчанию всем
attribution-reporting
Attribution Reporting · по умолчанию всем
Медиа и окно
fullscreen
Полноэкранный режим · по умолчанию только свой сайт
autoplay
Автовоспроизведение со звуком · по умолчанию только свой сайт
picture-in-picture
Картинка в картинке · по умолчанию всем
encrypted-media
EME (DRM) · по умолчанию только свой сайт
screen-wake-lock
Не гасить экран · по умолчанию только свой сайт
web-share
Web Share · по умолчанию только свой сайт
window-management
Управление окнами · по умолчанию только свой сайт
compute-pressure
Нагрузка на процессор · по умолчанию только свой сайт
sync-xhr
Синхронный XMLHttpRequest · по умолчанию всем
cross-origin-isolated
cross-origin isolation · по умолчанию только свой сайт
Permissions-Policy
Permissions-Policy: camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)
Куда вписать
nginx
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)" always;
Apache (.htaccess)
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)"
Caddy
header Permissions-Policy "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)"
Express
app.use((req, res, next) => {
res.setHeader('Permissions-Policy', "camera=(), microphone=(), geolocation=(), display-capture=(), usb=(), serial=(), hid=(), bluetooth=(), accelerometer=(), gyroscope=(), magnetometer=(), payment=(), clipboard-read=(), browsing-topics=(), fullscreen=(self)");
next();
});Атрибут allow для одного iframe
<iframe src="https://widget.example.com/" allow="fullscreen 'self'"></iframe>
Заголовок задаёт потолок: iframe получит функцию, только если её разрешают и заголовок страницы, и allow.
Что важно знать
- Синтаксис — словарь Structured Fields (RFC 8941): camera=(), а не camera 'none' как в CSP.
- Источники пишутся в двойных кавычках и без пути: "https://maps.example.com".
- В теге meta Permissions-Policy не работает — только заголовком ответа.
- interest-cohort=() (отказ от FLoC) больше не нужен: Chrome его не знает и пишет ошибку в консоль.