feat: secu migrate to user uuid
This commit is contained in:
116
MIGRATION_UUID.md
Normal file
116
MIGRATION_UUID.md
Normal 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)
|
||||
Reference in New Issue
Block a user