| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-07-06 | 1.7 kB | |
| v9.0.1 source code.tar.gz | 2026-07-06 | 4.9 MB | |
| v9.0.1 source code.zip | 2026-07-06 | 5.0 MB | |
| Totals: 3 Items | 9.9 MB | 0 | |
Responder 9.0.1
A bug-fix release from a post-9.0.0 adversarial scan. Several v9-new surfaces had crash or enforcement defects; upgrading from 9.0.0 is recommended, as some are security-relevant.
Fixed
- CSRF (security): the per-route
csrf=override was stored on the shared view object, so re-registering a function withcsrf=Falsestripped protection from its earlier routes, and a class-based view registered withcsrf=Falseleaked the exemption to subclasses through the MRO. Each registration's value is now frozen onto its own route. - CSRF: a non-ASCII submitted token (a client-controlled
csrf_tokenfield orX-CSRF-Tokenheader) crashedhmac.compare_digestand returned500instead of403. - CSRF:
csrf=Trueon a WebSocket route was accepted but never enforced; it now raises at registration. - Proxy headers: a forwarded
Hostport (orContent-Length) that is a non-ASCII digit character crashed inside the outermostProxyHeadersMiddleware, sending no response at all. - Rate limiting:
@limiter.limiton a class-based-view method returned500on every request. - GraphQL: a non-object JSON body and a multipart POST without a
queryfield both returned500; both now return400. - Forms: a malformed or oversized multipart body on the buffered parse branch returned
500instead of400. - OpenAPI: the generated-document cache ignored
request_timeoutandproblem_details, serving a stale schema after either changed.
Full changelog: https://github.com/kennethreitz/responder/blob/main/CHANGELOG.md
📦 PyPI: https://pypi.org/project/responder/9.0.1/