mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-08 22:58:01 -05:00
feat(backend): cache control headers (#10160)
### Why? 🤔 <!-- Clearly explain the need for these changes: --> We need to prevent sensitive data (authentication tokens, API keys, user credentials, personal information) from being cached by browsers and proxies. Following the principle of "secure by default", we're switching from a deny list to an allow list approach for cache control. ### Changes 🛠️ <!-- Concisely describe all of the changes made in this pull request: --> - **Refactored cache control middleware from deny list to allow list approach** - By default, ALL endpoints now have `Cache-Control: no-store, no-cache, must-revalidate, private` headers - Only explicitly allowed paths (static assets, health checks, public store pages) can be cached - This ensures new endpoints are automatically protected without developers having to remember to add them to a list - **Updated `SecurityHeadersMiddleware` in `/backend/backend/server/middleware/security.py`** - Renamed `SENSITIVE_PATHS` to `CACHEABLE_PATHS` - Inverted the logic in `is_cacheable_path()` method - Cache control headers are now applied to all paths NOT in the allow list - **Updated test suite to match new behavior** - Tests now verify that most endpoints have cache control headers by default - Tests verify that only allowed paths (static assets, health endpoints, etc.) can be cached - **Updated documentation in `CLAUDE.md`** - Documented the new allow list approach - Added instructions for developers on how to allow caching for new endpoints ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: <!-- Put your test plan here: --> - [x] Test modified endpoints work still - [x] Test modified endpoints correctly have no cache rules --------- Co-authored-by: Swifty <craigswift13@gmail.com>
This commit is contained in:
@@ -32,6 +32,7 @@ poetry run test
|
||||
poetry run pytest path/to/test_file.py::test_function_name
|
||||
|
||||
# Lint and format
|
||||
# prefer format if you want to just "fix" it and only get the errors that can't be autofixed
|
||||
poetry run format # Black + isort
|
||||
poetry run lint # ruff
|
||||
```
|
||||
@@ -77,6 +78,7 @@ npm run type-check
|
||||
- **Queue System**: RabbitMQ for async task processing
|
||||
- **Execution Engine**: Separate executor service processes agent workflows
|
||||
- **Authentication**: JWT-based with Supabase integration
|
||||
- **Security**: Cache protection middleware prevents sensitive data caching in browsers/proxies
|
||||
|
||||
### Frontend Architecture
|
||||
- **Framework**: Next.js App Router with React Server Components
|
||||
@@ -129,4 +131,15 @@ Key models (defined in `/backend/schema.prisma`):
|
||||
1. Components go in `/frontend/src/components/`
|
||||
2. Use existing UI components from `/frontend/src/components/ui/`
|
||||
3. Add Storybook stories for new components
|
||||
4. Test with Playwright if user-facing
|
||||
4. Test with Playwright if user-facing
|
||||
|
||||
### Security Implementation
|
||||
|
||||
**Cache Protection Middleware:**
|
||||
- Located in `/backend/backend/server/middleware/security.py`
|
||||
- Default behavior: Disables caching for ALL endpoints with `Cache-Control: no-store, no-cache, must-revalidate, private`
|
||||
- Uses an allow list approach - only explicitly permitted paths can be cached
|
||||
- Cacheable paths include: static assets (`/static/*`, `/_next/static/*`), health checks, public store pages, documentation
|
||||
- Prevents sensitive data (auth tokens, API keys, user data) from being cached by browsers/proxies
|
||||
- To allow caching for a new endpoint, add it to `CACHEABLE_PATHS` in the middleware
|
||||
- Applied to both main API server and external API applications
|
||||
Reference in New Issue
Block a user