Files
peakskills/MIGRATION_UUID.md
2025-08-21 13:54:13 +02:00

3.1 KiB

Migration vers UUIDs pour la sécurité

🎯 Objectif

Remplacer les user IDs séquentiels (1, 2, 3...) par des UUIDs pour éviter les attaques d'énumération.

⚠️ Important

Cette migration doit être effectuée quand l'application n'est pas en production ou pendant une maintenance.

📋 Étapes à suivre

Scenario A : Nouvelle installation (recommandé)

# 1. Supprimer l'ancienne DB si elle existe
dropdb peakskills

# 2. Créer une nouvelle DB avec le nouveau schema UUID
createdb peakskills
psql -h localhost -U peakskills_user -d peakskills -f scripts/init.sql

# 3. Migrer les données skills
npm run migrate-skills

# 4. Démarrer l'app
npm run dev

Scenario B : Migration base existante

# 1. Se connecter à PostgreSQL
psql -h localhost -U peakskills_user -d peakskills

# 2. Exécuter le script de migration
\i scripts/migrate-to-uuid.sql

# 3. Vérifier la migration
SELECT id, uuid_id, first_name, last_name FROM users LIMIT 5;

# 4. Redémarrer l'app
npm run dev

4. Nettoyer les anciennes sessions

  • Tous les utilisateurs devront se reconnecter (car les cookies utilisent maintenant des UUIDs)
  • C'est normal et nécessaire pour la sécurité

🔒 Sécurité apportée

Avant :

  • Cookie: peakSkills_userId=2
  • Facilement hackable: essayer 1, 3, 4, 5...

Après :

  • Cookie: peakSkills_userId=a1b2c3d4-e5f6-7890-abcd-ef1234567890
  • Impossible à deviner: UUID v4 avec 2^122 possibilités

🚀 Tests à effectuer

  1. Login nouveau utilisateur

    • Créer un compte → doit générer un UUID
    • Vérifier le cookie dans le navigateur
  2. Utilisateur existant

    • Se reconnecter → doit utiliser l'UUID existant
    • Vérifier que les données sont préservées
  3. Actions d'évaluation

    • Modifier une skill → doit fonctionner avec UUID
    • Vérifier que les données sont sauvées

📊 Migration status

  • Code application complètement adapté aux UUIDs
  • Nouvelles méthodes *Uuid() dans EvaluationService
  • Toutes les APIs modifiées (/api/auth, /api/evaluations, /api/evaluations/skills)
  • Functions SSR adaptées (server-auth.ts)
  • Middleware mis à jour
  • Types AuthService corrigés
  • À faire : Exécuter la migration DB
  • À faire : Tester en développement
  • À faire : Nettoyer le code legacy une fois validé

🔧 Fichiers modifiés

Services

  • services/evaluation-service.ts → Méthodes *Uuid() ajoutées
  • lib/server-auth.tsgetUserUuidFromCookie() et adaptations
  • lib/auth-utils.ts → Types de retour UUID

APIs

  • app/api/auth/route.ts → Cookies UUID
  • app/api/evaluations/route.tsgetUserByUuid()
  • app/api/evaluations/skills/route.ts → Toutes méthodes *Uuid()

Infrastructure

  • middleware.ts → Variables UUID
  • scripts/migrate-to-uuid.sql → Schema DB migration (pour existants)
  • scripts/init.sql → Schema DB initial avec UUIDs (pour nouvelles installs)

🧹 Nettoyage futur

Une fois la migration validée, supprimer :

  • Méthodes upsertUser() et getUserById() legacy
  • Colonnes id et user_id dans les tables (garder seulement UUIDs)