Optional hardening
Your pages do not restrict camera, microphone or location access
Your site does not send a Permissions-Policy header, which lets you switch off browser features your site never uses, such as the camera, microphone and location. It is optional hardening. If your site does not use those features, a one-line header turns them off.
Your pages do not restrict camera, microphone or location access. The Permissions-Policy header is missing.
Send the technical line below to whoever runs your site. Each of these is a one-line change in the server or hosting settings, and none of them changes how the site looks.
What it means
Browsers can give web pages access to powerful features: the camera, the microphone, the visitor's location, and more. Normally a page has to ask, and the visitor sees a prompt to allow or block it.
The Permissions-Policy header lets your site say up front which of those features it will never use. When a feature is switched off this way, the browser refuses it without even showing the prompt. That applies to your own scripts, to other companies' scripts on your page, and to anything embedded in a frame.
A common starting point is Permissions-Policy: camera=(), microphone=(), geolocation=(). The empty brackets mean nobody on your page may use that feature.
Why it matters
If a harmful script ever got onto your page, it could ask visitors for their camera or location while showing your name in the address bar. Many people click Allow on a site they trust. With the header in place, that request is never shown.
The protection is real but narrow. Browsers already ask before handing over these features, and support for the header varies. Chrome and Edge honor it fully, while support in other browsers is more limited.
That is why EverThread rates this as optional. It is a tidy extra layer, worth adding when you are already changing headers.
How to check your own site
- Open your home page in Chrome, Edge or Firefox. Right-click the page, choose Inspect, and open the Network tab.
- Reload the page. Click the first row in the list, which is the page itself, and look at the Response Headers section.
- Look for
permissions-policy. If it is not there, the header is missing. An older header calledfeature-policydoes not count, because current browsers have replaced it.
How to fix it
Any website
- List the features your site actually uses. A store locator with a "use my location" button uses geolocation. A video call or voice recording tool uses the camera or microphone. Most small business sites use none of them.
- Switch off only the features you do not use. For most sites that is
camera=(),microphone=()andgeolocation=(), separated by commas. - If your own site uses a feature, allow just your site with
self, as ingeolocation=(self). If an embedded tool from another company needs it, add its address in quotes, as incamera=(self "https://video.example.com"). - Be careful with
payment. Apple Pay, Google Pay and similar checkout buttons can rely on it, so leave it out unless you know you do not need it. - This header only works when sent by the server. There is no page tag version.
WordPress
- Headers are usually best set at the server or CDN, not inside WordPress.
- Check your host's dashboard for a security headers setting. Names vary by host.
- If your host runs Apache, add the lines from the Apache section below to the
.htaccessfile in your site's main folder. - A plugin is the fallback. Search the plugin directory for "security headers" and pick one that is actively maintained. Check any store locator, booking or contact plugin that asks for location after the change.
Shopify, Squarespace, Wix and other hosted builders
- These platforms run the servers, so you usually cannot add custom headers, and this one has no page tag alternative.
- If EverThread lists it on a hosted site, there is usually nothing to change. Since it is optional, it is fine to leave.
Cloudflare
- Go to Rules and create a response header rule. Depending on your dashboard, this is under Transform Rules, then Modify Response Header, or under Rules, Overview, as a Response Header Transform Rule.
- Apply it to all incoming requests. Choose Set static, enter
Permissions-Policyas the header name andcamera=(), microphone=(), geolocation=()as the value, then deploy. - Rules only apply to traffic that goes through Cloudflare, shown as an orange cloud in your DNS settings.
Apache (.htaccess)
- Add these lines to the
.htaccessfile in your site's main folder, or to your server's site settings. This needs themod_headersmodule, which most hosts have on.
<IfModule mod_headers.c>
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>Nginx
- Add this line inside your site's
serverblock, then reload Nginx.
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
What to send your developer
Send Permissions-Policy with an empty allowlist () for each powerful feature the site does not use. The syntax is a structured header: feature=() for none, feature=(self) for same origin, and quoted origins for others. Iframes also need a matching allow attribute to receive a feature, and they can never get more than the top-level policy grants. Remove any old Feature-Policy header and drop interest-cohort=(), which refers to a retired feature and only causes console warnings. Unknown feature names are ignored, so a typo fails silently: check the Console tab after deploying. See MDN on Permissions-Policy.
Permissions-Policy: camera=(), microphone=(), geolocation=(self), usb=(), serial=()
Common questions
Will this break anything?
Only if your site, or something embedded on it, uses a feature you switched off. The usual examples are a "find stores near me" button, a video chat widget or a voice recorder. Test those after adding the header. If one stops working, allow it with self or the tool's address.
My site does not use the camera. Why would I switch it off?
Because the header controls what any script on your page may ask for, not just yours. If a third-party script or injected code tried to request the camera, the browser would refuse without asking your visitor.
What happened to Feature-Policy?
It is the older name for the same idea, with a different syntax. Browsers have moved to Permissions-Policy, so use the new header and remove the old one.