5.9 KiB
5.9 KiB
Security Fixes TODO
Статус исправлений критических уязвимостей из аудита безопасности.
🔴 КРИТИЧЕСКИЕ (В РАБОТЕ)
Безопасность API
- Rate Limiting - защита от brute force атак
- Установить slowapi
- Добавить rate limiting на login (5/минуту)
- Добавить rate limiting на register (3/час)
- Добавить rate limiting на uploads (100/час)
Аутентификация
-
Token Revocation - logout должен удалять токен
- Создать Redis client для blacklist
- Добавить проверку blacklist в get_current_user
- Реализовать endpoint /auth/logout
-
Refresh Token Rotation - обновление токенов
- Endpoint /auth/refresh
- Отзыв старого refresh token при rotation
- Frontend interceptor для автообновления
-
Account Lockout - блокировка после 3 попыток на сутки
- LoginAttemptTracker с Redis
- Проверка блокировки перед login
- Запись неудачных попыток
Storage Management
- Storage Quota - 3GB по пользователю
- Миграция: добавить storage_quota_bytes и storage_used_bytes в User
- Проверка квоты при create_upload
- Увеличение used_bytes при finalize_upload
- Уменьшение used_bytes при delete (S3 trash)
- Endpoint GET /users/me/storage для статистики
Валидация файлов
-
Content-Type Whitelist - только разрешенные типы
- ALLOWED_IMAGE_TYPES whitelist
- ALLOWED_VIDEO_TYPES whitelist
- Обновить validator в schemas.py
-
Magic Bytes Verification - проверка реального типа файла
- Установить python-magic
- Проверка при finalize_upload
- Удаление файла из S3 при несовпадении
File Upload Security
- Streaming Chunks - предотвратить OOM
- Метод upload_fileobj_streaming в S3Client
- Обновить upload_file_to_s3 для стриминга
- Проверка размера ПЕРЕД чтением (макс 3GB)
ZIP Download
- ZIP Streaming - не держать весь архив в памяти
- Создание ZIP в temp файле
- FileResponse вместо возврата bytes
- BackgroundTask для удаления temp файла
Configuration
- Trash Bucket Config - убрать hardcode
- Добавить TRASH_BUCKET в config.py
- Использовать из конфига в S3Client
HTTP Security
- Security Headers - защита от XSS, clickjacking
- SecurityHeadersMiddleware
- X-Frame-Options, X-Content-Type-Options
- CSP, HSTS, Referrer-Policy
Architecture
- FolderService Refactoring - разделить обязанности
- Убрать прямую работу с AssetRepository
- Создать FolderManagementService для оркестрации
- Использовать AssetService methods
Search
- Asset Search - поиск по имени файла
- Метод search_assets в AssetRepository
- Endpoint GET /assets/search
- Поддержка ILIKE для поиска
🟡 TODO (ОТЛОЖЕНО НА ПОТОМ)
- JWT Secret Validation - проверка слабого секрета в продакшене
- S3 Encryption at Rest - ServerSideEncryption='AES256'
- Share Token Uniqueness Check - collision detection
- CSRF Protection - fastapi-csrf-protect
- Strong Password Validation - complexity requirements
- Database Indexes - composite indexes для производительности
- Foreign Keys - relationships в models
- Password Reset Flow - forgot/reset endpoints + email
- EXIF Metadata Extraction - captured_at, dimensions
- Database Backups - автоматизация бэкапов
- Comprehensive Testing - 70%+ coverage
- Monitoring & Logging - structured logging, metrics
- CI/CD Pipeline - GitHub Actions
📊 Progress
Выполнено: 14/14 критических задач ✅✅✅ Статус: 🎉 ВСЕ ЗАДАЧИ ЗАВЕРШЕНЫ!
✅ Завершено:
- ✅ slowapi добавлен в pyproject.toml
- ✅ Config обновлен (trash_bucket, max 3GB, default quota)
- ✅ Redis client создан (TokenBlacklist, LoginAttemptTracker)
- ✅ main.py: Rate limiting, Security Headers, CORS restrictive
- ✅ User model: storage_quota_bytes, storage_used_bytes
- ✅ Миграция 002: add_storage_quota создана
- ✅ schemas.py: Content-Type whitelist, 3GB max, RefreshTokenRequest, StorageStatsResponse
- ✅ dependencies.py: blacklist check в get_current_user
- ✅ auth.py: rate limiting на endpoints, logout, refresh, account lockout, storage stats
- ✅ S3Client: streaming upload (upload_fileobj_streaming), trash_bucket from config
- ✅ asset_service: storage quota check, streaming (upload_fileobj_streaming), magic bytes verification, storage_used_bytes updates
- ✅ batch_operations: ZIP streaming (temp file + FileResponse + BackgroundTasks cleanup), storage_used_bytes updates
- ✅ FolderService: refactored (removed asset modification, only read-only validation queries)
- ✅ AssetRepository + AssetService + API: search_assets method (ILIKE), GET /api/v1/assets/search endpoint
Дата начала: 2026-01-05 Последнее обновление: 2026-01-05 Финальный статус: 🎉 14/14 COMPLETED