go-supertools
Security & Privacy Tools

Permissions-Policy Header Generator

Build a Permissions-Policy header to switch off browser features such as camera, microphone and geolocation.

Runs in your browser Your input never leaves your device.

Accelerometer accelerometer
Motion sensor data. Browser default: your own pages only.
Autoplay autoplay
Playing media without a click. Browser default: your own pages only.
Browsing topics browsing-topics
The Topics advertising API. Browser default: everyone.
Camera camera
Video capture. Browser default: your own pages only.
Clipboard read clipboard-read
Reading the clipboard. Browser default: your own pages only.
Clipboard write clipboard-write
Writing to the clipboard. Browser default: your own pages only.
Compute pressure compute-pressure
CPU load information. Browser default: your own pages only.
Screen capture display-capture
getDisplayMedia: sharing the screen. Browser default: your own pages only.
Encrypted media encrypted-media
DRM video and audio. Browser default: your own pages only.
Fullscreen fullscreen
Going fullscreen. Browser default: your own pages only.
Gamepad gamepad
Game controllers. Browser default: your own pages only.
Geolocation geolocation
The visitor's position. Browser default: your own pages only.
Gyroscope gyroscope
Rotation sensor data. Browser default: your own pages only.
WebHID hid
Human interface devices. Browser default: your own pages only.
Federated credentials identity-credentials-get
FedCM sign-in. Browser default: your own pages only.
Idle detection idle-detection
Whether the user is idle. Browser default: your own pages only.
Keyboard map keyboard-map
The physical keyboard layout. Browser default: your own pages only.
Local fonts local-fonts
Listing installed fonts. Browser default: your own pages only.
Magnetometer magnetometer
Compass sensor data. Browser default: your own pages only.
Microphone microphone
Audio capture. Browser default: your own pages only.
Web MIDI midi
Music devices. Browser default: your own pages only.
OTP credentials otp-credentials
SMS one-time-code autofill. Browser default: your own pages only.
Payment Request payment
The Payment Request API. Browser default: your own pages only.
Picture-in-picture picture-in-picture
Floating video windows. Browser default: everyone.
Passkeys: create publickey-credentials-create
Creating WebAuthn credentials. Browser default: your own pages only.
Passkeys: sign in publickey-credentials-get
Using WebAuthn credentials. Browser default: your own pages only.
Screen wake lock screen-wake-lock
Keeping the screen on. Browser default: your own pages only.
Web Serial serial
Serial ports. Browser default: your own pages only.
Storage access storage-access
The Storage Access API. Browser default: everyone.
Synchronous XHR sync-xhr
Blocking network requests. Browser default: everyone.
WebUSB usb
USB devices. Browser default: your own pages only.
Window management window-management
Multi-screen window placement. Browser default: your own pages only.
WebXR xr-spatial-tracking
Virtual and augmented reality. Browser default: your own pages only.
Send the header with every page. It cannot be set with a <meta> tag. Features you leave alone keep the browser's default.

Report a problem with this tool

About this tool

The Permissions-Policy response header tells browsers which powerful features a page, and the pages embedded in it, may use: camera, microphone, geolocation, payment, USB, fullscreen and more. Switching off what you do not need limits the damage if a script on your site, or an embedded advertisement or widget, tries to use it. For each of 33 features choose: leave at the browser default, nobody, your own pages only, everyone including embedded content, or a list of specific origins such as https://maps.example.com, with or without your own pages. Presets give a locked-down start. The tool writes the header value and wraps it for the place you will put it: a plain header, nginx add_header, an Apache Header directive, a _headers file for Cloudflare Pages or Netlify, netlify.toml, vercel.json, Express, or a Cloudflare Worker. The value is a Structured Fields dictionary, so the syntax is strict: features are separated by commas, an allowlist is in parentheses, and origins are in double quotes. We parsed 60 random generated headers with Python's http_sfv, which implements RFC 8941, and served one with every kind of rule to Chrome, which then reported for each feature, for your own origin and for others, exactly the access the header describes, without a warning, and knows every feature name we use. A few things to know: the header cannot be set in a meta tag, a feature that you leave unset keeps the browser's default, browsers ignore feature names they do not know, and an iframe can still be given less than the header allows through its allow attribute but never more. Nothing is uploaded.

How to use it

  1. Pick a preset, or set each feature you care about.
  2. For specific origins, enter one per line, such as https://example.com.
  3. Choose where you will put the header.
  4. Copy the result and add it to your server or hosting settings.

Common problems

It says an origin is not valid
An origin has a scheme and a host, optionally a port, and no path: https://example.com or https://*.example.com. Remove paths and query strings.
The header has no effect
Check that your server really sends it (look at the response headers in your browser's developer tools), and that the feature name is spelled as in the list.
An embedded widget stopped working
The widget needs a feature you switched off for embedded content. Allow its origin for that feature, or leave the feature at its default.