La configuration .env pour empêcher Claude Code de divulguer vos secrets (config complète incluse)

La configuration .env pour empêcher Claude Code de divulguer vos secrets (config complète incluse)

@zodchiii
ANGLAISil y a 2 semaines · 30 avr. 2026

AI features

1.7M
1.3K
149
30
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.

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**🧠

darkzodchi on X — cover

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 ».

darkzodchi - inline image

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

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 :

text
1# .env.test — safe to read, safe to leak
2STRIPE_SECRET_KEY=sk_test_not_a_real_key
3DATABASE_URL=postgres://test:test@localhost:5432/testdb
4OPENAI_API_KEY=sk-test-dummy-key-for-mocking
5AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
6AWS_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

bash
1#!/bin/bash
2# .git/hooks/pre-commit — bloque les commits contenant des secrets
3
4PATTERNS=(
5 'sk-ant-' # Clés API Anthropic
6 'sk-live-' # Clés live Stripe
7 'sk_live_' # Clés live Stripe (format alternatif)
8 'ghp_' # Tokens personnels GitHub
9 'gho_' # Tokens OAuth GitHub
10 'AKIA' # Clés d'accès AWS
11 'xox[bpors]-' # Tokens Slack
12 'SG\.' # Clés SendGrid
13 'eyJ' # JWT
14 'BEGIN.*PRIVATE KEY' # Matériel de clé privée
15)
16
17BLOCKED_FILES=('.env' 'credentials.json' 'id_rsa' '*.pem' '*.key')
18
19for pattern in "${PATTERNS[@]}"; do
20 if git diff --cached --diff-filter=ACM | grep -qE "$pattern"; then
21 echo "BLOQUÉ : Secret potentiel trouvé correspondant à '$pattern'"
22 echo "Supprimez le secret et réessayez."
23 exit 1
24 fi
25done
26
27for file in "${BLOCKED_FILES[@]}"; do
28 if git diff --cached --name-only | grep -q "$file"; then
29 echo "BLOQUÉ : Tentative de commit d'un fichier sensible : $file"
30 exit 1
31 fi
32done
33
34echo "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

bash
1# Mount /dev/null over .env so Claude can't see it
2docker 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

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 :

  1. Avez-vous des règles de refus pour les fichiers .env dans settings.json ?
  1. Vos tests utilisent-ils .env.test avec des valeurs factices ?
  1. Y a-t-il un hook pre-commit qui scanne les motifs de secrets ?
  1. Les identifiants de production sont-ils stockés dans un coffre, pas dans des fichiers en texte clair ?
  1. .env est-il dans votre .gitignore ?
  1. 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🙏🏼

darkzodchi - inline image

More patterns to decode

Recent viral articles

Explore more viral articles

Pensé pour les créateurs.

Trouvez des idées dans les articles viraux sur 𝕏, décodez pourquoi ils ont fonctionné et transformez ces modèles en votre prochain angle de créateur.