Skip to content

Workflow de revue de code : /code-review et audit de sécurité

Ce que vous apprendrez

La revue de code est une étape cruciale pour garantir la qualité et la sécurité du code. Ce tutoriel vous aide à :

  • ✅ Utiliser la commande /code-review pour vérifier automatiquement les modifications
  • ✅ Comprendre la différence entre les agents code-reviewer et security-reviewer
  • ✅ Maîtriser la checklist de sécurité (OWASP Top 10)
  • ✅ Détecter et corriger les vulnérabilités courantes (injection SQL, XSS, clés codées en dur, etc.)
  • ✅ Appliquer les standards de qualité du code (taille des fonctions, longueur des fichiers, couverture de tests, etc.)
  • ✅ Comprendre les critères d'approbation (CRITICAL, HIGH, MEDIUM, LOW)

Votre situation actuelle

Vous avez écrit du code, prêt à commiter, mais :

  • ❌ Vous ne savez pas s'il y a des vulnérabilités de sécurité
  • ❌ Vous craignez d'avoir manqué des problèmes de qualité
  • ❌ Vous n'êtes pas sûr d'avoir suivi les bonnes pratiques
  • ❌ La vérification manuelle est chronophage et sujette aux oublis
  • ❌ Vous souhaitez détecter les problèmes automatiquement avant de commiter

Le workflow de revue de code d'Everything Claude Code résout ces problèmes :

  • Vérification automatisée : La commande /code-review analyse automatiquement toutes les modifications
  • Revue spécialisée : L'agent code-reviewer se concentre sur la qualité, l'agent security-reviewer sur la sécurité
  • Classification par gravité : Les problèmes sont classés par niveau de sévérité (CRITICAL, HIGH, MEDIUM, LOW)
  • Recommandations détaillées : Chaque problème inclut des suggestions de correction concrètes

Quand utiliser cette technique

Avant chaque commit, vous devriez exécuter une revue de code :

  • ✅ Après avoir terminé une nouvelle fonctionnalité
  • ✅ Après avoir corrigé un bug
  • ✅ Après avoir refactorisé du code
  • ✅ Lors de l'ajout d'endpoints API (security-reviewer obligatoire)
  • ✅ Pour le code traitant des entrées utilisateur (security-reviewer obligatoire)
  • ✅ Pour le code impliquant l'authentification/autorisation (security-reviewer obligatoire)

Bonne pratique

Prenez l'habitude : avant chaque git commit, exécutez /code-review. S'il y a des problèmes CRITICAL ou HIGH, corrigez-les avant de commiter.

🎒 Prérequis

Ce dont vous avez besoin :

  • Everything Claude Code installé (si ce n'est pas fait, consultez le Démarrage rapide)
  • Quelques modifications de code (vous pouvez d'abord écrire du code avec /tdd)
  • Une connaissance de base des opérations Git

Ce dont vous n'avez pas besoin :

  • Pas besoin d'être expert en sécurité (l'agent détecte pour vous)
  • Pas besoin de mémoriser toutes les bonnes pratiques de sécurité (l'agent vous les rappelle)

Concept clé

Everything Claude Code fournit deux agents de revue spécialisés :

Agent code-reviewer

Se concentre sur la qualité du code et les bonnes pratiques, vérifie :

  • Qualité du code : Taille des fonctions (>50 lignes), longueur des fichiers (>800 lignes), profondeur d'imbrication (>4 niveaux)
  • Gestion des erreurs : Try/catch manquants, instructions console.log
  • Standards de code : Conventions de nommage, code dupliqué, patterns d'immutabilité
  • Bonnes pratiques : Utilisation d'emojis, TODO/FIXME sans ticket, JSDoc manquant
  • Couverture de tests : Nouveau code sans tests

Cas d'utilisation : Toutes les modifications de code devraient passer par code-reviewer.

Agent security-reviewer

Se concentre sur les vulnérabilités et les menaces de sécurité, vérifie :

  • OWASP Top 10 : Injection SQL, XSS, CSRF, contournement d'authentification, etc.
  • Fuites de secrets : Clés API, mots de passe, tokens codés en dur
  • Validation des entrées : Validation des entrées utilisateur manquante ou incorrecte
  • Authentification/Autorisation : Vérifications d'identité et de permissions incorrectes
  • Sécurité des dépendances : Dépendances obsolètes ou avec des vulnérabilités connues

Cas d'utilisation : Le code sensible en termes de sécurité (API, authentification, paiement, entrées utilisateur) doit obligatoirement passer par security-reviewer.

Classification par niveau de gravité

NiveauSignificationBloque le commit ?Exemple
CRITICALVulnérabilité de sécurité grave ou problème de qualité majeur❌ Doit bloquerClé API codée en dur, injection SQL
HIGHProblème de sécurité ou de qualité important❌ Doit bloquerGestion d'erreurs manquante, vulnérabilité XSS
MEDIUMProblème de priorité moyenne⚠️ Peut commiter avec prudenceUtilisation d'emojis, JSDoc manquant
LOWProblème mineur✓ Peut être corrigé plus tardFormatage incohérent, nombres magiques

Suivez le guide : Votre première revue de code

Étape 1 : Créer des modifications de code

Commencez par écrire un endpoint API simple avec /tdd (incluant quelques failles de sécurité) :

bash
/tdd

Demandez à Claude Code de créer une API de connexion utilisateur, le code ressemblera à ceci :

typescript
// src/api/login.ts
export async function loginUser(email: string, password: string) {
  const query = `SELECT * FROM users WHERE email = '${email}'`  // ❌ Risque d'injection SQL
  const user = await db.query(query)
  
  if (user.password === password) {  // ❌ Comparaison de mot de passe en clair
    const token = generateToken(user.id)
    console.log('User logged in:', { email, password })  // ❌ Fuite du mot de passe dans les logs
    return { token }
  }
}

Pourquoi Ce code contient plusieurs failles de sécurité et problèmes de qualité, idéal pour démontrer la fonctionnalité de revue de code.

Vous devriez voir : Le fichier de code a été créé.


Étape 2 : Exécuter la revue de code

Maintenant, exécutez la commande /code-review :

bash
/code-review

Pourquoi/code-review appelle automatiquement l'agent code-reviewer pour vérifier toutes les modifications non commitées.

Vous devriez voir : L'agent commence à analyser le code, puis génère un rapport de revue.


Étape 3 : Consulter le rapport de revue

code-reviewer génère un rapport similaire à celui-ci :

markdown
# Code Review Report

## Critical Issues (Fix Immediately)

### 1. [CRITICAL] Hardcoded credentials
**File:** src/api/login.ts:3
**Issue:** Password logging in console
**Fix:** Remove password from logs, only log user ID

```typescript
// ❌ Bad
console.log('User logged in:', { email, password })

// ✓ Good
console.log('User logged in:', { email, userId: user.id })

2. [CRITICAL] SQL injection vulnerability

File: src/api/login.ts:2 Issue: String concatenation in SQL query Fix: Use parameterized queries

typescript
// ❌ Bad
const query = `SELECT * FROM users WHERE email = '${email}'`

// ✓ Good
const { data } = await supabase
  .from('users')
  .select('*')
  .eq('email', email)

High Issues (Fix Before Production)

3. [HIGH] Plaintext password comparison

File: src/api/login.ts:4 Issue: Password stored in plaintext Fix: Use bcrypt to hash passwords

typescript
// ❌ Bad
if (user.password === password) {

// ✓ Good
import bcrypt from 'bcrypt'
const isValid = await bcrypt.compare(password, user.password)

Recommendations

  1. Add input validation for email format
  2. Add rate limiting to prevent brute force attacks
  3. Use JWT tokens instead of generating custom tokens

Approval Status

❌ BLOCKED - 2 CRITICAL issues found

Please fix all CRITICAL and HIGH issues before committing.


**Pourquoi**
Le rapport est classé par gravité, chaque problème inclut l'emplacement, la description, les suggestions de correction et des exemples de code.

**Vous devriez voir** : Un rapport de revue clair, indiquant tous les problèmes et les suggestions de correction.

---

### Étape 4 : Corriger les problèmes

Corrigez le code selon le rapport :

```typescript
// src/api/login.ts
import bcrypt from 'bcrypt'
import { z } from 'zod'

const LoginSchema = z.object({
  email: z.string().email(),
  password: z.string().min(8)
})

export async function loginUser(input: unknown) {
  // Validation des entrées
  const validated = LoginSchema.parse(input)
  
  // Requête paramétrée (prévient l'injection SQL)
  const { data: user } = await supabase
    .from('users')
    .select('*')
    .eq('email', validated.email)
    .single()
  
  if (!user) {
    throw new Error('Invalid credentials')
  }
  
  // Comparaison de mot de passe haché
  const isValid = await bcrypt.compare(validated.password, user.password_hash)
  
  if (isValid) {
    const token = generateToken(user.id)
    console.log('User logged in:', { email: validated.email, userId: user.id })
    return { token }
  }
  
  throw new Error('Invalid credentials')
}

Pourquoi Corrigez tous les problèmes CRITICAL et HIGH, ajoutez la validation des entrées et la comparaison de mot de passe haché.

Vous devriez voir : Le code a été mis à jour, les failles de sécurité ont été éliminées.


Étape 5 : Nouvelle revue

Exécutez à nouveau /code-review :

bash
/code-review

Pourquoi Vérifiez que tous les problèmes ont été corrigés, assurez-vous que le code peut être commité.

Vous devriez voir : Un rapport d'approbation similaire à celui-ci :

markdown
# Code Review Report

## Summary

- **Critical Issues:** 0 ✓
- **High Issues:** 0 ✓
- **Medium Issues:** 1 ⚠️
- **Low Issues:** 1 💡

## Medium Issues (Fix When Possible)

### 1. [MEDIUM] Missing JSDoc for public API
**File:** src/api/login.ts:9
**Issue:** loginUser function missing documentation
**Fix:** Add JSDoc comments

```typescript
/**
 * Authenticates a user with email and password
 * @param input - Login credentials (email, password)
 * @returns Object with JWT token
 * @throws Error if credentials invalid
 */
export async function loginUser(input: unknown) {

Low Issues (Consider Fixing)

2. [LOW] Add rate limiting

File: src/api/login.ts:9 Issue: Login endpoint lacks rate limiting Fix: Add express-rate-limit middleware

typescript
import rateLimit from 'express-rate-limit'

const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5 // 5 attempts per window
})

app.post('/api/login', loginLimiter, loginUser)

Approval Status

✅ APPROVED - No CRITICAL or HIGH issues

Note: Medium and Low issues can be fixed in follow-up commits.


**Vous devriez voir** : Revue approuvée, le code peut être commité.

---

### Étape 6 : Revue de sécurité dédiée (optionnel)

Si votre code implique des endpoints API, de l'authentification, des paiements ou d'autres fonctionnalités sensibles en termes de sécurité, vous pouvez appeler spécifiquement security-reviewer :

```bash
/security-reviewer

Pourquoi security-reviewer effectue une analyse OWASP Top 10 plus approfondie, vérifiant davantage de patterns de vulnérabilités de sécurité.

Vous devriez voir : Un rapport de revue de sécurité détaillé, incluant l'analyse OWASP, la vérification des vulnérabilités des dépendances, les recommandations d'outils de sécurité, etc.


Point de contrôle ✅

Après avoir terminé les étapes ci-dessus, vous devriez :

  • ✅ Être capable d'exécuter la commande /code-review
  • ✅ Comprendre la structure et le contenu du rapport de revue
  • ✅ Être capable de corriger les problèmes de code selon le rapport
  • ✅ Savoir que les problèmes CRITICAL et HIGH doivent être corrigés
  • ✅ Comprendre la différence entre code-reviewer et security-reviewer
  • ✅ Avoir pris l'habitude de faire une revue avant de commiter

Pièges à éviter

Erreur courante 1 : Ignorer la revue de code

Problème : Penser que le code est simple et commiter directement sans exécuter de revue.

Conséquence : Des vulnérabilités de sécurité peuvent être manquées, rejetées par le CI/CD ou causer des incidents en production.

Bonne pratique : Prenez l'habitude d'exécuter /code-review avant chaque commit.


Erreur courante 2 : Ignorer les problèmes MEDIUM

Problème : Voir les problèmes MEDIUM et les ignorer, les laissant s'accumuler.

Conséquence : La qualité du code se dégrade, la dette technique s'accumule, la maintenance devient difficile.

Bonne pratique : Bien que les problèmes MEDIUM ne bloquent pas le commit, ils devraient être corrigés dans un délai raisonnable.


Erreur courante 3 : Corriger manuellement l'injection SQL

Problème : Écrire son propre échappement de chaînes au lieu d'utiliser des requêtes paramétrées.

Conséquence : L'échappement est incomplet, le risque d'injection SQL persiste.

Bonne pratique : Utilisez toujours un ORM ou des requêtes paramétrées, ne concaténez jamais manuellement du SQL.


Erreur courante 4 : Confondre les deux reviewers

Problème : Exécuter uniquement code-reviewer pour tout le code, en ignorant security-reviewer.

Conséquence : Des vulnérabilités de sécurité peuvent être manquées, particulièrement pour le code impliquant des API, de l'authentification ou des paiements.

Bonne pratique :

  • Code ordinaire : code-reviewer suffit
  • Code sensible en termes de sécurité : security-reviewer est obligatoire en plus

Résumé de la leçon

Le workflow de revue de code est l'une des fonctionnalités principales d'Everything Claude Code :

FonctionnalitéAgentÉléments vérifiésGravité
Revue de qualité du codecode-reviewerTaille des fonctions, gestion des erreurs, bonnes pratiquesHIGH/MEDIUM/LOW
Revue de sécuritésecurity-reviewerOWASP Top 10, fuites de secrets, vulnérabilités d'injectionCRITICAL/HIGH/MEDIUM

Points clés :

  1. Avant chaque commit, exécutez /code-review
  2. Les problèmes CRITICAL/HIGH doivent être corrigés avant de commiter
  3. Le code sensible en termes de sécurité doit passer par security-reviewer
  4. Le rapport de revue inclut l'emplacement précis et les suggestions de correction
  5. Prenez l'habitude : Revue → Correction → Nouvelle revue → Commit

Aperçu de la prochaine leçon

Dans la prochaine leçon, nous apprendrons l'Automatisation avec les Hooks.

Vous apprendrez :

  • Ce que sont les Hooks et comment automatiser le workflow de développement
  • Comment utiliser plus de 15 hooks d'automatisation
  • Comment personnaliser les Hooks pour les adapter aux besoins du projet
  • Les cas d'utilisation des hooks SessionStart, SessionEnd, PreToolUse, etc.

Annexe : Référence du code source

Cliquez pour voir l'emplacement du code source

Dernière mise à jour : 2026-01-25

FonctionnalitéChemin du fichierLigne
---------
---------
---------
---------

Constantes clés :

  • Limite de taille de fonction : 50 lignes (code-reviewer.md:47)
  • Limite de taille de fichier : 800 lignes (code-reviewer.md:48)
  • Limite de profondeur d'imbrication : 4 niveaux (code-reviewer.md:49)

Fonctions clés :

  • /code-review : Appelle l'agent code-reviewer pour la revue de qualité du code
  • /security-reviewer : Appelle l'agent security-reviewer pour l'audit de sécurité
  • git diff --name-only HEAD : Obtient les fichiers modifiés non commités (code-review.md:5)

Critères d'approbation (code-reviewer.md:90-92) :

  • ✅ Approve : Aucun problème CRITICAL ou HIGH
  • ⚠️ Warning : Uniquement des problèmes MEDIUM (peut merger avec prudence)
  • ❌ Block : Problèmes CRITICAL ou HIGH détectés