| default-src | Fallback for every fetch directive that is not explicitly set. Set this first; only override specific directives where you need a different policy. |
| script-src | Origins and inline policies for JavaScript. The most security-relevant directive. Aim for 'self' plus a nonce or 'strict-dynamic'. |
| style-src | Origins for stylesheets and inline style policy. Inline style is less risky than inline script but still allows injection-driven UI redress. |
| img-src / font-src | Origins for images and fonts. data: is commonly added to img-src for inline icons. |
| connect-src | Origins for fetch, XHR, WebSocket, EventSource, and Beacon. Forget this and your API calls fail. |
| frame-src | Origins your page is allowed to frame. Use 'none' unless you embed third-party widgets. |
| frame-ancestors | Origins allowed to frame your page. Modern equivalent of X-Frame-Options. Set to 'none' unless your app must be embeddable. |
| form-action | Origins HTML forms are allowed to submit to. Stops a phishing iframe from posting to attacker endpoints. |
| object-src | Plugin content (object, embed, applet). Should be 'none' for almost every modern app. |
| base-uri | Origins allowed in the document's <base> tag. Set to 'self' or 'none' to stop base-tag injection. |
| upgrade-insecure-requests | Rewrites http:// resource URLs to https:// at the browser. Safe modern default. |
| report-uri / report-to | Where the browser sends violation reports. Send both for now: report-uri for legacy support and report-to (with a Reporting-Endpoints header) for modern browsers. |