feat(security): add request size limits to API endpoints
- Add RequestSizeLimitMiddleware that checks Content-Length header before request body is read: non-multipart requests capped at MAX_REQUEST_BODY_SIZE (default 1 MB), multipart uploads capped at MAX_UPLOAD_SIZE (default 1 GB). Returns HTTP 413 on violation. - Register middleware in app/main.py - Add max_request_body_size setting to app/config.py - Fix ui_upload in files.py to check Content-Length early and read in 64 KB chunks (bounded memory usage), removing the post-write os.path.getsize check - Document MAX_REQUEST_BODY_SIZE in .env.demo and ConfigurationGuide.md - Mark SECURITY_AUDIT.md item #4 as resolved - Add 9 tests in test_request_size_limit.py - Update test_upload_file_too_large to use patch.object instead of the now-unused os.path.getsize mock Closes #173 Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -39,12 +39,14 @@ Control how the `/processall` endpoint handles large batches of files to prevent
|
||||
|---------------------------|--------------------------------------------------------------------------------------------------------------|---------------|
|
||||
| `MAX_UPLOAD_SIZE` | Maximum file upload size in bytes. Files exceeding this limit are rejected. | `1073741824` (1GB) |
|
||||
| `MAX_SINGLE_FILE_SIZE` | Optional: Maximum size for a single file chunk in bytes. Files exceeding this are split into smaller parts. | `None` (no splitting) |
|
||||
| `MAX_REQUEST_BODY_SIZE` | Maximum request body size in bytes for non-file-upload requests (JSON, form data, etc.). File uploads use `MAX_UPLOAD_SIZE` instead. | `1048576` (1MB) |
|
||||
|
||||
**Configuration Examples:**
|
||||
|
||||
```bash
|
||||
# Default: Allow up to 1GB uploads, no splitting
|
||||
# Default: Allow up to 1GB uploads, no splitting, 1MB JSON/form body limit
|
||||
MAX_UPLOAD_SIZE=1073741824
|
||||
MAX_REQUEST_BODY_SIZE=1048576
|
||||
|
||||
# Conservative: 100MB max, split files over 50MB
|
||||
MAX_UPLOAD_SIZE=104857600
|
||||
|
||||
Reference in New Issue
Block a user