
La configuration .env pour empêcher Claude Code de divulguer vos secrets (config complète incluse)
AI features
- Views
- 1.7M
- Likes
- 1.3K
- Reposts
- 149
- Comments
- 30
- Bookmarks
- 5.9K
TL;DR
Apprenez à sécuriser Claude Code en configurant les règles de refus dans settings.json, en utilisant des environnements de test fictifs et en implémentant des hooks de pré-commit pour éviter les fuites d'identifiants sensibles.
Reading the FRANÇAIS translation
Claude Code lit vos fichiers .env dès qu'il ouvre votre projet.
Vos clés API, mots de passe de base de données, tokens Stripe, tout ce qui se trouve dans le fichier .env est chargé en mémoire et peut se retrouver dans les journaux de conversation envoyés aux serveurs d'Anthropic.
La seule chose qui bloque réellement l'accès est une ligne dans settings.json, que la plupart des gens n'ont pas et ne connaissent pas.
Voici la configuration de sécurité complète 👇
Avant de plonger, je partage des notes quotidiennes sur l'IA et le vibe coding dans mon canal Telegram : **https://t.me/zodchixquant**🧠

Pourquoi les règles CLAUDE.md ne vous protègent pas
La plupart des gens ajoutent « ne jamais lire les fichiers .env » à leur CLAUDE.md et pensent être en sécurité (ils ne le sont pas)
CLAUDE.md est une suggestion. Claude la suit la plupart du temps, mais sous pression (tâches complexes, contexte long, instructions ambiguës), il peut et ignore les règles consultatives.
Un problème GitHub d'avril 2026 a confirmé : Claude lit et renvoie le contenu du .env dans la conversation même lorsque CLAUDE.md l'interdit explicitement.
La seule protection fiable est une règle de refus dans settings.json. Les règles de refus sont appliquées au niveau système avant même que Claude ne voie le fichier.
La différence entre « s'il vous plaît, ne lisez pas ceci » et « vous ne pouvez physiquement pas lire ceci ».

Les 3 façons dont vos secrets fuient
Il ne s'agit pas seulement de Claude lisant .env directement. Il y a trois chemins :
1. Lecture directe du fichier. Claude analyse votre projet, ouvre .env et le contenu devient partie du contexte de la conversation. C'est le cas évident et le plus facile à bloquer avec des règles de refus.
2. Capture de la sortie d'exécution. Claude exécute vos tests ou démarre votre application. Une requête HTTP échouée enregistre l'en-tête complet Authorization: Bearer sk-live-abc123.... Un délai d'attente de base de données vide la chaîne de connexion avec le mot de passe. Claude capture toute la sortie des commandes. Vos secrets sont maintenant dans la conversation, même si Claude n'a jamais ouvert .env.
3. Outils Grep et recherche. Claude utilise grep pour rechercher un nom de fonction dans votre codebase. La recherche tombe sur un fichier de configuration contenant des identifiants. La sortie grep inclut les lignes correspondantes avec vos secrets visibles.
La plupart des gens ne se protègent que contre le chemin 1. Les chemins 2 et 3 sont là où les dégâts réels se produisent.
Les règles de refus qui fonctionnent réellement
Ajoutez-les à ~/.claude/settings.json pour une protection globale sur tous les projets :
json
1{2 "permissions": {3 "deny": [4 "Read(**/.env*)",5 "Read(**/.dev.vars*)",6 "Read(**/*.pem)",7 "Read(**/*.key)",8 "Read(**/secrets/**)",9 "Read(**/credentials/**)",10 "Read(**/.aws/**)",11 "Read(**/.ssh/**)",12 "Read(**/config/database.yml)",13 "Read(**/config/credentials.json)",14 "Read(**/.npmrc)",15 "Read(**/.pypirc)",16 "Write(**/.env*)",17 "Write(**/secrets/**)",18 "Write(**/.ssh/**)"19 ]20 }21}
Cela empêche Claude de lire ou d'écrire tout fichier .env, clés PEM, clés SSH, configurations AWS, fichiers d'identifiants et tokens npm/PyPI. Le joker \\ signifie qu'il s'applique à tous les sous-répertoires de votre projet.
Bloquer les fuites d'exécution
Les règles de refus empêchent les lectures directes de fichiers mais pas la sortie d'exécution. Pour cela, utilisez des fichiers .env spécifiques aux tests avec des valeurs factices :
1# .env.test — safe to read, safe to leak2STRIPE_SECRET_KEY=sk_test_not_a_real_key3DATABASE_URL=postgres://test:test@localhost:5432/testdb4OPENAI_API_KEY=sk-test-dummy-key-for-mocking5AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE6AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Pointez votre framework de test vers .env.test au lieu de .env. Maintenant, quand Claude exécute vos tests et capture la sortie, les seules clés visibles sont factices.
Le hook pre-commit qui attrape tout
Même avec des règles de refus, des erreurs arrivent. Ajoutez un hook git pre-commit qui scanne les secrets avant que tout commit n'atteigne votre dépôt :
bash
1#!/bin/bash2# .git/hooks/pre-commit — bloque les commits contenant des secrets34PATTERNS=(5 'sk-ant-' # Clés API Anthropic6 'sk-live-' # Clés live Stripe7 'sk_live_' # Clés live Stripe (format alternatif)8 'ghp_' # Tokens personnels GitHub9 'gho_' # Tokens OAuth GitHub10 'AKIA' # Clés d'accès AWS11 'xox[bpors]-' # Tokens Slack12 'SG\.' # Clés SendGrid13 'eyJ' # JWT14 'BEGIN.*PRIVATE KEY' # Matériel de clé privée15)1617BLOCKED_FILES=('.env' 'credentials.json' 'id_rsa' '*.pem' '*.key')1819for pattern in "${PATTERNS[@]}"; do20 if git diff --cached --diff-filter=ACM | grep -qE "$pattern"; then21 echo "BLOQUÉ : Secret potentiel trouvé correspondant à '$pattern'"22 echo "Supprimez le secret et réessayez."23 exit 124 fi25done2627for file in "${BLOCKED_FILES[@]}"; do28 if git diff --cached --name-only | grep -q "$file"; then29 echo "BLOQUÉ : Tentative de commit d'un fichier sensible : $file"30 exit 131 fi32done3334echo "Vérification de sécurité pre-commit réussie."35exit 0
Rendez-le exécutable : chmod +x .git/hooks/pre-commit
Cela attrape les clés API Anthropic, les clés Stripe, les tokens GitHub, les clés AWS, les tokens Slack, les clés SendGrid, les JWT et le matériel de clé privée. Si l'un d'eux apparaît dans un fichier stagé, le commit est bloqué.
Isolation par conteneur (l'option nucléaire)
Pour une sécurité maximale, exécutez Claude Code dans un conteneur où les fichiers .env n'existent littéralement pas :
bash
1# Mount /dev/null over .env so Claude can't see it2docker run -v /dev/null:/app/.env:ro your-dev-container
Du point de vue de Claude, .env est un fichier vide. Vos secrets n'entrent jamais dans le système de fichiers du conteneur. C'est excessif pour la plupart des projets mais essentiel pour le travail client avec des identifiants de production.
La configuration de sécurité complète (prête à copier-coller)
~/.claude/settings.json complet avec toutes les protections de sécurité :
json
1{2 "permissions": {3 "allow": [4 "Read",5 "Glob",6 "Grep",7 "LS",8 "Edit",9 "MultiEdit",10 "Write(src/**)",11 "Write(tests/**)",12 "Bash(npm run *)",13 "Bash(npm test *)",14 "Bash(npx tsc *)",15 "Bash(git status)",16 "Bash(git diff *)",17 "Bash(git log *)",18 "Bash(git add *)",19 "Bash(git commit *)"20 ],21 "deny": [22 "Read(**/.env*)",23 "Read(**/.dev.vars*)",24 "Read(**/*.pem)",25 "Read(**/*.key)",26 "Read(**/secrets/**)",27 "Read(**/credentials/**)",28 "Read(**/.aws/**)",29 "Read(**/.ssh/**)",30 "Read(**/config/database.yml)",31 "Read(**/config/credentials.json)",32 "Read(**/.npmrc)",33 "Read(**/.pypirc)",34 "Write(**/.env*)",35 "Write(**/secrets/**)",36 "Write(**/.ssh/**)",37 "Write(.github/workflows/*)",38 "Bash(rm -rf *)",39 "Bash(sudo *)",40 "Bash(git push *)",41 "Bash(npm publish *)",42 "Bash(curl * | sh)",43 "Bash(wget *)",44 "Bash(chmod *)"45 ],46 "defaultMode": "acceptEdits"47 }48}
C'est le settings.json de mon article précédent plus toutes les règles de sécurité de celui-ci. Règles d'autorisation pour le flux de travail quotidien, règles de refus pour les secrets et les opérations dangereuses. Un fichier, protection complète.
La liste de vérification
Avant votre prochaine session Claude Code :
- Avez-vous des règles de refus pour les fichiers .env dans settings.json ?
- Vos tests utilisent-ils .env.test avec des valeurs factices ?
- Y a-t-il un hook pre-commit qui scanne les motifs de secrets ?
- Les identifiants de production sont-ils stockés dans un coffre, pas dans des fichiers en texte clair ?
- .env est-il dans votre .gitignore ?
- Les fichiers .env sont-ils en dehors du répertoire de votre projet pour une sécurité supplémentaire ?
Si vous avez coché les 6, vos secrets sont aussi protégés que possible. Si vous avez coché 0, vous êtes à une invite Claude ambiguë de voir vos clés API apparaître dans un journal de conversation sur les serveurs d'Anthropic.
Je partage des notes quotidiennes sur l'IA, la finance et le vibe coding dans mon canal Telegram : **https://t.me/zodchixquant**
Merci d'avoir lu🙏🏼



