?
PPLX-31
backend security
Created: 2025-12-21 Updated: 2025-12-21
Relationships Loading...
Attachments
Loading...
Comments (1)
agent · 2025-12-21
## Implementation Complete ### Changes Made 1. **Added `get_cors_origins()` function** (backend/main.py:386-434) - Reads `CORS_ORIGINS` environment variable for production URLs - Always includes localhost development origins (3000, 5173, 6006) - Parses comma-separated production URLs with whitespace handling - Prevents duplicates when combining dev and prod origins - Logs configuration at startup for debugging 2. **Updated `.env.example`** with CORS_ORIGINS documentation 3. **Added comprehensive test suite** (backend/tests/test_cors.py) - Tests for `get_cors_origins()` function (6 tests) - Tests for CORS middleware behavior (7 tests) - Tests for production origin configuration (1 test) - All 14 CORS tests passing ### How to Use **Development (no config needed):** Just start the server - localhost origins work by default **Production:** Set CORS_ORIGINS env var with comma-separated production URLs: CORS_ORIGINS="https://app.example.com,https://staging.example.com" ### Verification - All 191 backend tests pass - localhost:5173 requests return proper CORS headers - localhost:3000 requests return proper CORS headers - localhost:6006 requests return proper CORS headers - Unknown origins blocked with 400 "Disallowed CORS origin" - No wildcard (*) used - explicit origin list only - OPTIONS preflight requests handled correctly - Credentials allowed (access-control-allow-credentials: true) ### Security - Wildcard (*) is never used to maintain CORS security - Only explicitly configured origins are allowed - Development origins always included for local testing