Guide de sécurité Claude Code : bonnes pratiques
Guide complet de sécurité pour Claude Code : principe du moindre privilège, audit des MCP, profils de configuration, monitoring et checklist copiable.
Introduction : sécurité par conception, pas par addition
La sécurité de Claude Code n'est pas une couche qu'on ajoute après coup. C'est une mentalité qu'on intègre dès le départ dans sa façon de configurer et d'utiliser l'outil.
Un guide pratique, pas théorique
Ce guide est orienté action. Chaque principe est accompagné de mesures concrètes que vous pouvez appliquer immédiatement. La checklist en fin de page est copiable directement dans votre CLAUDE.md.
La bonne nouvelle : les pratiques de sécurité décrites ici ne dégradent pas votre productivité. Elles vous protègent des erreurs coûteuses et vous font gagner du temps à long terme.
Principe 1 : Le moindre privilège
La règle d'or
Accordez à chaque composant (MCP, agent, script) uniquement les permissions dont il a besoin pour sa fonction, pas plus.
Ce principe s'applique à plusieurs niveaux :
Niveau filesystem :
// ❌ Trop permissif{"mcpServers": {"filesystem": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-filesystem", "/"]}}}// ✅ Moindre privilège{"mcpServers": {"filesystem": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"]}}}
Niveau tokens d'accès :
# ❌ Token GitHub avec tous les droitsgh auth login # Accorde tous les scopes# ✅ Token GitHub avec scopes minimaux# Créer un token classique sur github.com/settings/tokens# Cocher uniquement : repo:read, issues:read (si lecture seule suffit)
Niveau agents :
- Un agent de code review ne doit pas avoir accès aux credentials de déploiement
- Un agent de documentation ne doit pas pouvoir modifier le code source
- Un agent de CI n'a pas besoin d'accès à votre boîte mail
Application pratique
Avant d'accorder une permission, posez-vous la question : "Ce composant a-t-il réellement besoin de cet accès pour sa fonction actuelle ?"
Si la réponse est "peut-être" ou "au cas où", refusez.
Principe 2 : Audit avant installation
Les 5 vérifications obligatoires
Avant d'installer n'importe quel MCP, plugin ou script :
Vérifier l'identité du package
npm info nom-du-package# Vérifiez : maintainers, version, homepage, repository# Le repository pointe vers le bon repo GitHub ?# L'auteur est l'organisation attendue ?
Lire le code source principal
Ouvrez le fichier principal du package sur GitHub (souvent index.js, src/index.ts). Cherchez :
- Des requêtes réseau vers des serveurs externes inattendus
- Des accès à des fichiers système sensibles (~/.ssh, ~/.aws, ~/.env)
- Du code obfusqué ou minifié qui cache son comportement
Vérifier la popularité et l'âge
# Téléchargements hebdomadairesnpm show nom-du-package dist-tags# Date de première publicationnpm show nom-du-package time.created
Un package publié il y a 3 jours avec 10 téléchargements est à traiter avec beaucoup plus de prudence qu'un package établi depuis 2 ans avec 10 000 téléchargements/semaine.
Rechercher des signalements de sécurité
Cherchez sur GitHub Issues du repo : "security", "malware", "token", "credentials". Cherchez aussi sur Google : "[nom-du-package] malicious" ou "[nom-du-package] security".
Tester avec des données non sensibles
Lors du premier usage, testez le MCP sur un projet fictif ou sans données sensibles. Observez son comportement avant de l'exposer à vos vrais projets.
Principe 3 : Profils de configuration par projet
Pourquoi des profils différents ?
Votre setup pour un projet open-source public est très différent de votre setup pour un projet avec données client. Utiliser un seul profil global pour tout est une erreur de sécurité.
Structure recommandée
~/.claude/settings.json # Configuration globale (pas de MCP sensibles)
# Token API, préférences générales
projet-opensource/
.mcp.json # MCP pour ce projet public
CLAUDE.md # Instructions projet (pas de secrets)
projet-client-sensible/
.mcp.json # MCP minimalistes pour ce projet
CLAUDE.md # Instructions projet (pas de tokens)
.gitignore # CLAUDE.md dans .gitignore si confidentiel
Exemple de profils
// .mcp.json - Projet frontend public{"mcpServers": {"filesystem": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-filesystem", "./src", "./public"]},"playwright": {"command": "npx","args": ["-y", "@playwright/mcp"]}}}
// .mcp.json - Projet avec base de données (séparation des environnements){"mcpServers": {"filesystem": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"]},"database-dev": {"command": "npx","args": ["-y", "@modelcontextprotocol/server-postgres"],"env": {"POSTGRES_URL": "${DATABASE_DEV_URL}"}}}}// Note : accès uniquement à la BDD de développement, jamais production
Principe 4 : Monitoring du contexte avec /cost
La commande /cost n'est pas seulement un outil budgétaire, c'est aussi un indicateur de sécurité.
# Dans une session Claude Code/cost
Utilisez /cost pour :
- Détecter les anomalies : si votre session consomme beaucoup plus de tokens que d'habitude sans raison apparente, peut-être que Claude lit des fichiers inattendus ou effectue des appels MCP anormaux
- Surveiller les appels MCP : les résultats de MCP (surtout d'APIs externes) peuvent générer beaucoup de tokens d'input. Examinez ce que Claude a lu
- Calibrer vos profils : identifier quels MCP consomment le plus de contexte au démarrage
Vérifier les appels MCP inhabituels
Si /cost indique une consommation anormalement haute sur les tokens d'entrée, demandez à Claude : "Qu'as-tu lu et quels appels MCP as-tu effectués dans cette session ?" Claude peut vous lister ses actions récentes.
Principe 5 : Rotation des sessions
Pourquoi renouveler régulièrement ses sessions
Une session Claude Code longue accumule du contexte. Plus le contexte est chargé :
- Plus la qualité des réponses se dégrade
- Plus le risque d'injections persistantes augmente (une instruction malveillante lue en début de session reste dans le contexte)
- Plus les coûts augmentent par message
Cadence de rotation recommandée
| Type d'usage | Fréquence de rotation |
|---|---|
| Session de développement standard | Toutes les 2-3h, ou entre features |
| Session avec lecture de sources externes | Après chaque session de lecture |
| CI/CD headless | Nouvelle session pour chaque job |
| Session multi-projets | Entre chaque changement de projet |
Ce que faire avant de clore une session
# Avant de fermer Claude Code, demandez :"Résume les décisions importantes prises dans cette session.Liste les conventions adoptées et les patterns utilisés.Je vais noter ceci dans le CLAUDE.md avant de fermer."
Copiez ce résumé dans votre CLAUDE.md ou dans un fichier de notes. Ce sera votre point de départ pour la prochaine session.
Principe 6 : Jamais dangerouslySkipPermissions en production
Le flag --dangerously-skip-permissions existe pour des cas d'usage très spécifiques (CI/CD dans des environnements complètement sandboxés, tests automatisés isolés). Il ne doit jamais être utilisé :
- En développement quotidien
- Avec des MCP accédant à des données sensibles
- Avec des MCP d'exécution (Bash, eval, scripts)
- En dehors d'un environnement sandbox contrôlé
# ❌ Jamais en développement standardclaude --dangerously-skip-permissions# ✅ Usage CI/CD isolé uniquement# (Dans un Docker container sans credentials réels, avec données de test)claude --dangerously-skip-permissions --print "Exécute les tests"
Si vous ressentez le besoin d'utiliser ce flag pour un gain de productivité, c'est probablement un problème de workflow à résoudre autrement.
Principe 7 : Review des résultats MCP suspects
Signaux d'alerte dans une session
Soyez attentif à ces comportements qui peuvent indiquer une prompt injection ou un MCP malveillant :
- Actions non demandées : Claude effectue des actions que vous n'avez pas explicitement demandées
- Accès à des fichiers inattendus : Claude mentionne avoir lu
~/.ssh/configou~/.envalors que vous travaillez sur du code - Requêtes réseau inattendues : Claude mentionne avoir fait une requête HTTP vers un domaine inconnu
- Changements de comportement : Claude adopte soudainement un comportement différent de ses instructions normales
Comment réagir
Si vous suspectez une prompt injection :
- Arrêtez la session immédiatement : ne continuez pas à interagir
- Examinez les logs : quels fichiers ont été lus ? Quels appels MCP ont été effectués ?
- Vérifiez vos credentials : aucun fichier sensible n'a-t-il été lu ?
- Signalez le MCP suspect : ouvrez une issue sur son repository GitHub
Principe 8 : Séparation des environnements
La règle de base
Les credentials de production ne doivent jamais être dans votre environnement de développement Claude Code.
# ❌ Variable d'environnement de production dans votre shell de devexport PROD_DATABASE_URL="postgresql://prod-server/..."# → Claude peut lire votre shell env via MCP ou outils# ✅ Variables distinctes par environnementexport DEV_DATABASE_URL="postgresql://localhost/dev_db"# En production : variables injectées par le système de déploiement
Architecture recommandée pour les projets avec données sensibles
Environnement local (Claude Code)
├── BDD de développement (données fictives)
├── APIs en mode sandbox/test
├── MCP avec tokens read-only
└── Credentials à rotation fréquente
CI/CD (Claude Code headless)
├── Environnement sandboxé (Docker)
├── Credentials injectés par le système CI
└── Accès réseau limité aux services nécessaires
Production
└── Aucun accès Claude Code (déploiement automatisé uniquement)
Checklist complète de sécurité (copiable dans votre CLAUDE.md)
## Sécurité Claude Code### Configuration initiale- [ ] MCP filesystem configuré avec le chemin le plus restreint possible- [ ] Aucun secret dans CLAUDE.md (utiliser des références env)- [ ] Tokens d'accès avec scopes minimaux pour chaque MCP- [ ] .mcp.json par projet (pas de config MCP globale pour tout)- [ ] CLAUDE.md dans .gitignore si contenu confidentiel### Avant d'installer un MCP- [ ] Nom exact du package vérifié (anti-typosquatting)- [ ] Auteur/organisation confirmé sur npm et GitHub- [ ] Code source lu (index.js ou src/index.ts)- [ ] Aucune requête réseau inattendue dans le code- [ ] Téléchargements et âge du package vérifiés- [ ] Issues GitHub consultées pour signalements de sécurité- [ ] Test initial avec données non sensibles### En session- [ ] /cost consulté régulièrement pour détecter les anomalies- [ ] Arguments des appels MCP vérifiés (pas juste le nom de l'outil)- [ ] Actions non demandées → arrêt immédiat + investigation- [ ] Accès à ~/.ssh, ~/.aws, ~/.env non prévu → refus immédiat- [ ] Jamais --dangerously-skip-permissions hors sandbox contrôlé### Rotation et maintenance- [ ] Session renouvelée toutes les 2-3h ou entre features- [ ] Décisions importantes documentées dans CLAUDE.md avant fermeture- [ ] Revue trimestrielle des MCP installés (supprimer les inutilisés)- [ ] Mise à jour régulière des MCP (npm update dans les projets)- [ ] Rotation des tokens d'accès tous les 90 jours### Séparation des environnements- [ ] Aucun credential de production dans l'environnement de dev- [ ] BDD de développement avec données fictives uniquement- [ ] APIs tierces en mode sandbox/test pour le développement- [ ] CI/CD dans environnement sandboxé (Docker ou équivalent)
Prochaines étapes
- Sécurité des MCP : Les vecteurs d'attaque spécifiques aux MCP en détail
- Mythes sur Claude Code : Démystifier les idées reçues sur la sécurité
- Coûts réels de Claude Code : Sécurité et budget vont de pair
- Guide CLAUDE.md : Comment structurer un CLAUDE.md sécurisé
- Configurateur interactif : Générez une configuration sécurisée adaptée à votre profil
- Installer et configurer un MCP : Configuration sécurisée dès le départ