3.1 KiB
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
-
Login nouveau utilisateur
- Créer un compte → doit générer un UUID
- Vérifier le cookie dans le navigateur
-
Utilisateur existant
- Se reconnecter → doit utiliser l'UUID existant
- Vérifier que les données sont préservées
-
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éeslib/server-auth.ts→getUserUuidFromCookie()et adaptationslib/auth-utils.ts→ Types de retour UUID
APIs
app/api/auth/route.ts→ Cookies UUIDapp/api/evaluations/route.ts→getUserByUuid()app/api/evaluations/skills/route.ts→ Toutes méthodes*Uuid()
Infrastructure
middleware.ts→ Variables UUIDscripts/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()etgetUserById()legacy - Colonnes
idetuser_iddans les tables (garder seulement UUIDs)