🔒 `.env` + `.gitignore` : La règle d’or pour TOUS les projets

Publié le 13/01/2026 par Frédéric dans la catégorie "Généralités"

Clés d'API en clair ? Mots de passe commités sur GitHub ? Ne soyez pas la prochaine victime d'une fuite de données. Découvrez le guide universel pour maîtriser .env et .gitignore sur PHP, JS, Python et plus encore. Une méthode unique pour sécuriser tous vos projets.

Prompt pour l'IA

Analyse le code suivant pour vérifier le respect des bonnes pratiques liées à l'utilisation des fichiers .env. Pour chaque point, indique si la règle est respectée (✅), violée (❌), ou partiellement respectée (⚠️), et propose une correction :

  1. Chargement : Est-il sécurisé (ex: createImmutable en PHP, dotenv.config() en JS) ? Y a-t-il une gestion d'erreur si .env manque ?
  2. Accès : Les variables sont-elles accédées via $_ENV, process.env, os.getenv, etc. ? Y a-t-il des accès directs dangereux ou du hardcoding ?
  3. Validation : Les variables requises (DB, API) sont-elles vérifiées avant utilisation ?
  4. Sécurité Git : Le fichier .env est-il exclu du versionnage ?

Explication détaillée

📝 1. Description courte du problème

Problème : Les fichiers .env mal gérés sont la 1ère cause de fuites de secrets. Risques :

  • Exposition publique via Git.
  • Injectons de variables si elles ne sont pas validées.
  • Accès par URL (spécifique au Web/PHP) si le fichier est dans le dossier racine.

Solution attendue : Chargement immuable, validation stricte, et exclusion Git totale.


🛠️ 2. Guide technique par langage

Tableau de configuration parallèle

Étape JavaScript Python PHP Go
Installation npm install dotenv pip install python-dotenv composer require vlucas/phpdotenv go get github.com/joho/godotenv
Charger .env require('dotenv').config() load_dotenv() Dotenv::createImmutable(__DIR__)->load() godotenv.Load()
Validation if (!process.env.VAR) throw... assert "VAR" in os.environ $dotenv->required(['VAR'])->notEmpty() Manuelle avec os.Getenv

🐘 3. Focus Sécurité : Le Cas du Web

Le risque est que le fichier soit servi en clair par Apache ou Nginx.

  • Sécurité physique : Placez le fichier .env en dehors du dossier racine (public/ ou www/).
  • Validation stricte avec phpdotenv :
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
    $dotenv->load()
    // Empêche le script de continuer si ces clés sont vides ou absentes
    $dotenv->required(['DB_PASSWORD', 'SECRET_KEY'])->notEmpty();
    // Validation de format
    $dotenv->required('ENVIRONMENT')->allowedValues(['dev', 'staging', 'prod']);

📂 4. La stratégie Git / .gitignore

Avant votre premier commit, créez un fichier .gitignore à la racine :

# Dossiers de dépendances
node_modules/
vendor/
__pycache__/

# SECRETS (À IGNORER ABSOLUMENT)
.env
.env.local
.env.*.local

# ARCHITECTURE (À GARDER)
!.env.example

🚀 5. Utilisation en Production

La règle d'or : Jamais de fichier .env sur un serveur de production. Utilisez les variables d'environnement système :

Environnement Méthode
Cloud (Vercel/Heroku) Dashboard > Settings > Environment Variables
Docker Section environment: dans docker-compose.yml
Apache SetEnv DB_PASSWORD "xxx" dans .htaccess
Nginx fastcgi_param DB_PASSWORD "xxx"; dans la config

🔍 6. Vérification de sécurité (Commandes)

Lancer ces audits régulièrement :

# 1. Vérifier que .env est ignoré par Git
git check-ignore -v .env

# 2. Scanner les fuites de secrets (Outil : TruffleHog ou Gitleaks)
gitleaks detect --source . --report-path report.json

# 3. Vérifier les permissions système
ls -la .env  # Doit être "-rw-------" (chmod 600)

📌 Checklist finale (Toutes technos)

  1. [ ] Fichier .env ajouté au .gitignore.
  2. [ ] Fichier .env.example créé (sanitisé).
  3. [ ] Variables de base validées au démarrage de l'app.
  4. [ ] Utilisation de createImmutable (en PHP) ou méthodes équivalentes.
  5. [ ] Zéro secret hardcodé dans le code source.

"Un .env commité est un .env compromis. Un .env en production est un .env vulnérable." 🚀