MOC-security-patterns.md 2.3 KB

MOC: Паттерны безопасности PhotoPlaces

Аутентификация и сессии

graph LR
    A[Login] --> B[Access Token JWT 15min]
    A --> C[Refresh Token SHA-256 в DB]
    C --> D[HttpOnly Cookie SameSite=Strict]
    B --> E[Bearer Authorization Header]
    D --> F[/auth/refresh → rotation]
    F --> G[Token reuse → RevokeAll]

Ключевые решения

Область Решение Документ
Refresh token storage SHA-256 хеш в PostgreSQL [[decision-jwt-refresh-storage]]
Concurrent refresh DeleteIfExists + проверка rows_affected [[atomic-refresh-token-race-condition]]
CSRF SameSite=Strict для refresh cookie [[atomic-csrf-protection]]
Rate limiting Redis + in-memory fallback, per-IP через X-Forwarded-For [[backend-rate-limiting]]
WebSocket per-connection rate limiter, глобальный лимит соединений [[atomic-websocket-origin-check]]
Error exposure Скрытие деталей в production (500 + validation) [[decision-validation-error-production]]

Production hardening

  • CORS: только разрешённые AllowedOrigins
  • CSP: Content-Security-Policy через Caddy ([[atomic-csp-configuration]])
  • JWT secrets: _FILE suffix для Docker secrets, валидация при старте
  • Request body: http.MaxBytesReader (1 MB лимит)
  • Rate limiter: fail closed в production (503 при недоступности Redis)

Проверки аудита

  1. Все ли секреты вынесены из кода? (✓ env vars / Docker secrets)
  2. Есть ли _ в начале TLS в коде? (✓ нет прямых TLS настроек — всё через Caddy)
  3. Используются ли параметризованные запросы? (✓ pgx)
  4. Есть ли any или interface{} в публичных API? (✓ в writeJSON(v interface{}) — допустимо, это транспорт)
  5. Тестируется ли security? (— пока нет, нужно добавлять)

Связанные заметки

  • [[architecture-overview]]
  • [[backend-auth-security]]
  • [[deploy-production-readiness]]

#security #MOC #backend #auth #production