feat: secu migrate to user uuid

This commit is contained in:
Julien Froidefond
2025-08-21 13:54:13 +02:00
parent ef16c73625
commit 578f0858e8
12 changed files with 532 additions and 70 deletions

116
MIGRATION_UUID.md Normal file
View File

@@ -0,0 +1,116 @@
# 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é)
```bash
# 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
```bash
# 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.ts``getUserUuidFromCookie()` et adaptations
- `lib/auth-utils.ts` → Types de retour UUID
### APIs
- `app/api/auth/route.ts` → Cookies UUID
- `app/api/evaluations/route.ts``getUserByUuid()`
- `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)