Skip to content

Security: shakedarazi/TaskGenius

Security

docs/SECURITY.md

Security Hardening (Phase 6)

Security Measures Implemented

1. Authentication & Password Security

  • bcrypt password hashing: All passwords are hashed using bcrypt with automatic salt generation
  • No plaintext storage: Passwords are never stored in plaintext; only hashes are persisted
  • Password validation: Minimum 8 characters, maximum 128 characters enforced via Pydantic schemas
  • No password logging: Passwords are never logged or exposed in error messages

2. JWT / Auth Hardening

  • Environment-based secrets: JWT_SECRET_KEY loaded from environment variables
  • Token expiration: JWT tokens expire after configurable time (default: 30 minutes)
  • Secret validation: Startup validation warns if default secret is used in production
  • Algorithm enforcement: JWT algorithm (HS256) is explicitly enforced during validation

3. Input Validation

  • Pydantic schemas: All request payloads validated via Pydantic models
  • Type safety: Strong typing prevents malformed input
  • HTTP status codes: Proper error codes (400, 401, 422) for validation failures
  • Username validation: Alphanumeric + underscores, 3-50 characters
  • Password validation: 8-128 characters enforced

4. CORS Configuration

  • Explicit origins: CORS configured with explicit allowed origins (no wildcard)
  • Environment-driven: CORS_ORIGINS configurable via environment variable
  • Wildcard rejection: Wildcard (*) is explicitly rejected for security
  • Production-ready: Default allows localhost for development; production must set specific origins

5. Rate Limiting

  • ⚠️ Not implemented: No rate limiting middleware is currently installed
  • 📝 Recommendation: For production, implement rate limiting using:
    • FastAPI middleware (e.g., slowapi)
    • Reverse proxy (nginx, Cloudflare)
    • API Gateway (AWS API Gateway, Kong)
  • 📝 Priority endpoints: /auth/login, /auth/register, /chat should be rate-limited

6. Secrets & Logging

  • No secret logging: Secrets (JWT keys, passwords, tokens) are never logged
  • Graceful failure: Missing secrets (e.g., TELEGRAM_BOT_TOKEN) fail gracefully without crashing
  • Environment validation: Security configuration validated on startup with warnings
  • Debug mode: Sensitive endpoints (docs) disabled in production (DEBUG=false)

Security Configuration

Required Environment Variables

# JWT Configuration (REQUIRED in production)
JWT_SECRET_KEY=<strong-random-secret-min-32-chars>

# CORS Configuration (REQUIRED in production)
CORS_ORIGINS=https://yourdomain.com,https://www.yourdomain.com

# Optional (has defaults for development)
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
DEBUG=false

Security Warnings

The application will issue warnings (not errors) for:

  • Default JWT_SECRET_KEY in production
  • CORS wildcard usage
  • Short JWT secrets (< 32 chars) in production

These warnings allow development and tests to run while alerting to security issues.

Testing Security

All security measures are tested without requiring:

  • Real secrets or API keys
  • Network access
  • External services

Tests validate:

  • Password hashing and verification
  • JWT token creation and validation
  • Input validation and error handling
  • CORS configuration

There aren't any published security advisories