Skip to main content
In production, when DEBUG=False, Feather adds these headers to every response. They’re on by default and skipped in development, so most apps never touch this page.

Default CSP

data: and blob: are there so a page can preview a file someone has just chosen, before it is uploaded anywhere.

Files you store elsewhere

An app that keeps uploads in a bucket has to be able to show them. When S3_PUBLIC_URL or S3_ENDPOINT is set, that origin is added to img-src and media-src for you:
Nothing to configure, and a blocked image stops being the first thing you meet after building an upload page.

Extending it

Custom directives merge with the defaults, so you specify only what changes. For Stripe:
config.py

Disabling

Not recommended. If a third-party script is blocked, add its origin to the relevant directive rather than turning off the header.
The strict script-src 'self' is why inline <script> blocks and onclick= handlers are feather check errors. Code that works in development would be blocked by CSP in production.