v9.0.1
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