Declare which browser APIs your site is allowed to use, and shut down everything else at the browser layer.
Setting publickey-credentials-create=(self) and publickey-credentials-get=(self) ensures the WebAuthn API can only be invoked by your own origin. Third-party iframes and injected code can't silently enrol an attacker-controlled passkey or authorise an action the user didn't intend.
Combined with a strict Content Security Policy, this closes the gap between strong authentication and a compromised session.
Permissions Policy is enabled with a single HTTP response header. You can start with a permissive configuration and tighten it as you see which features your application actually uses.
Every violation is delivered as a Reporting API report and surfaced in your Report URI dashboard in real time — alongside CSP, COEP, COOP, NEL and every other browser-level security event — so you have a single, consistent view of your browser security posture.
Alongside Permissions Policy, consider these browser security mechanisms for a defence-in-depth posture.
Block injected scripts before they can abuse an authenticated session.
Content Security Policy