Verbatim copy of Django's CSRF middleware, but with more verbose error messages.
Project description
Verbose CSRF Middleware
This is a verbatim copy of the Django CSRF middleware, but it is more verbose in its failures.
This is especially useful when CSRF failures are happening due to some misconfiguration of your server, your reverse proxy, or some combination thereof.
Django 4.0 introduced various "more strict" CSRF checks, in particular checks on the Origin and Referer header.
This middleware can help you debug problems with those checks in your setup.
Installation:
pip install verbose_csrf_middleware
In your settings.py file, in the MIDDLEWARE_CLASSES, search for this line:
'django.middleware.csrf.CsrfViewMiddleware', # search this to remove it
and then replace it with the line below:
'verbose_csrf_middleware.CsrfViewMiddleware',
Seeing the output
You'll probably want to see the output of the middleware somewhere. You can either:
- Turn on
DEBUG - Make sure messages to the logger
"django.security.csrf"(level: warning) end up in a location you can read. - Add a template
403_csrf.htmlto your templates directory. Make sure the template renders"reason". - Add a
CSRF_FAILURE_VIEW
Note that optinos 1, 3 and 4 have at least theoretical security implications, because by the nature of "verbose" they expose some information to end-users.
Why is this better?
Compare the below; - is Django's standard message, + is the verbose one. You'll see the latter contains much more
useful info.
- Origin checking failed - http://nonmatching does not match any trusted origins.
+ Origin header does not match (deduced) Host: 'http://nonmatching' != 'http://testserver'
- Origin checking failed - https://thisiswrong.example.org does not match any trusted origins.
+ Origin header does not match (deduced) Host: 'https://thisiswrong.example.org' != 'https://testserver'; nor any of the CSRF_TRUSTED_ORIGINS: ['https://subdomain.example.org']
- Origin checking failed - https://anything.example.org does not match any trusted origins.
+ Origin header does not match (deduced) Host: 'https://anything.example.org' != 'https://testserver'; nor any of the CSRF_TRUSTED_ORIGINS: ['http://*.example.org (wrong scheme)']
- Origin checking failed - null does not match any trusted origins.
+ Origin header does not match (deduced) Host: 'null' != 'http://testserver'
- Referer checking failed - https://refererheader.org/ does not match any trusted origins.
+ Referer checking failed - 'refererheader.org' does not match any of ['csrf_trusted_origin.org' (trusted), 'testserver' (host)].
- Referer checking failed - https://www.wrong.org/ does not match any trusted origins.
+ Referer checking failed - 'www.wrong.org' does not match any of ['testserver' (host)].
- Referer checking failed - https://nonmatching.example.org/ does not match any trusted origins.
+ Referer checking failed - 'nonmatching.example.org' does not match any of ['expected.example.org' (session_cookie)].
(this output is generated by running the test suite, but turning on Django's standard middleware)
Compatability
This middleware is a verbatim copy of Django's csrf middleware, with changes for verbosity. For each minor version of Django (from Django 5.2 onwards) a matching version of the middleware is provided.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file verbose_csrf_middleware-6.0.0.tar.gz.
File metadata
- Download URL: verbose_csrf_middleware-6.0.0.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bd4fee530137cf1005416d8fac4e843df69eb665e95d446b62458d0f421504d
|
|
| MD5 |
72512054e423149838e37617db41b368
|
|
| BLAKE2b-256 |
a4443e535cc7d58664d68cb7e341317f5d3e1f7ecdee17079ef3e8e267e963b5
|
File details
Details for the file verbose_csrf_middleware-6.0.0-py3-none-any.whl.
File metadata
- Download URL: verbose_csrf_middleware-6.0.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
900a8dbfd6e67bf533aab8b3e6ae1d0c7c77e8797ea29a6649873e31b104a7f9
|
|
| MD5 |
b9b85678379f19c16ccbd1f1dff56090
|
|
| BLAKE2b-256 |
61cdb1c691629f8d80be4997d464331bce198374158f6a1385f6d8dd7e469fa2
|