🔒 `.env` + `.gitignore` : La règle d’or pour TOUS les projets
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 :
- Chargement : Est-il sécurisé (ex:
createImmutableen PHP,dotenv.config()en JS) ? Y a-t-il une gestion d'erreur si.envmanque ?- 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 ?- Validation : Les variables requises (DB, API) sont-elles vérifiées avant utilisation ?
- Sécurité Git : Le fichier
.envest-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
.enven dehors du dossier racine (public/ouwww/). - 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)
- [ ] Fichier .env ajouté au .gitignore.
- [ ] Fichier .env.example créé (sanitisé).
- [ ] Variables de base validées au démarrage de l'app.
- [ ] Utilisation de createImmutable (en PHP) ou méthodes équivalentes.
- [ ] Zéro secret hardcodé dans le code source.
"Un
.envcommité est un.envcompromis. Un.enven production est un.envvulnérable." 🚀