Pour éviter cette faille de sécurité majeure, la solution standard dans l’industrie du développement web consiste à utiliser des variables d’environnement PHP. Au lieu d’écrire vos secrets dans le code source, vous les stockez dans un fichier externe spécifique, invisible pour le reste du monde, que votre application viendra lire dynamiquement.
Dans ce tutoriel, nous allons voir comment mettre en place un fichier .env dans votre projet PHP afin de sécuriser définitivement vos mots de passe et vos configurations sensibles.
Le danger des mots de passe en clair
Lorsque vous débutez en PHP, il est naturel de stocker les informations de connexion à la base de données directement dans le code, souvent de cette manière :
<?php
$host = 'localhost';
$user = 'root';
$password = 'MonSuperMotDePasse123!';
$dbname = 'ma_base';
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
Le problème majeur de cette approche est que votre mot de passe fait désormais partie intégrante de votre code source. Si vous partagez ce code avec un collègue, si vous l’envoyez sur un dépôt Git (comme GitHub ou GitLab), ou si une faille permet de lire vos fichiers, votre base de données est immédiatement compromise.
Qu’est-ce qu’une variable d’environnement ?
Une variable d’environnement est une valeur dynamique chargée dans l’environnement d’exécution de votre application, plutôt que d’être écrite en dur dans le code. En d’autres termes, c’est une configuration qui vit sur le serveur (ou sur votre machine locale) et que votre script PHP vient lire au moment où il s’exécute.
L’approche la plus courante en PHP moderne consiste à utiliser un fichier nommé .env (point env). Ce fichier contient vos informations sensibles sous forme de paires clé/valeur, et il n’est jamais partagé avec le code source.
Mettre en place un fichier .env en PHP
Pour lire facilement un fichier .env, la communauté PHP utilise massivement une bibliothèque appelée phpdotenv. Voici comment la mettre en place pas à pas dans votre projet.
Étape 1 : Installer phpdotenv via Composer
Pour gérer cette dépendance, vous devez utiliser Composer, le gestionnaire de paquets standard de PHP. Ouvrez votre terminal, placez-vous à la racine de votre projet et tapez la commande suivante :
composer require vlucas/phpdotenvCette commande va télécharger la bibliothèque et l’ajouter à votre dossier vendor.
Étape 2 : Créer le fichier .env
À la racine de votre projet (généralement au même niveau que votre index.php ou votre composer.json), créez un nouveau fichier et nommez-le très exactement .env.
Ajoutez-y vos identifiants :
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=MonSuperMotDePasse123!
DB_NAME=ma_base
API_KEY=123456789abcdefNote : Il n’y a pas d’espaces autour du signe égal (=) et les guillemets ne sont généralement pas nécessaires, sauf si votre valeur contient des espaces.
Étape 3 : Charger et utiliser les variables en PHP
Maintenant que votre fichier est prêt, vous devez indiquer à PHP de le lire. Dans votre fichier de configuration ou au tout début de votre application, ajoutez le code suivant :
<?php
// 1. Charger l'autoloader de Composer
require_once __DIR__ . '/vendor/autoload.php';
// 2. Initialiser dotenv et charger le fichier .env
$dotenv = DotenvDotenv::createImmutable(__DIR__);
$dotenv->load();
// 3. Utiliser les variables d'environnement PHP
$host = $_ENV['DB_HOST'];
$user = $_ENV['DB_USER'];
$password = $_ENV['DB_PASSWORD'];
$dbname = $_ENV['DB_NAME'];
// Connexion sécurisée à la base de données
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
echo "Connexion réussie !";
} catch (PDOException $e) {
echo "Erreur de connexion : " . $e->getMessage();
}
Désormais, la superglobale $_ENV contient toutes les valeurs de votre fichier .env. Votre code source est propre, fonctionnel, et ne contient plus aucune donnée confidentielle.
L’étape indispensable : ignorer le fichier .env dans Git
C’est le point le plus crucial de ce tutoriel. Si vous utilisez Git pour versionner votre code, vous devez absolument empêcher l’envoi du fichier .env sur votre dépôt distant.
Pour cela, ouvrez (ou créez) le fichier .gitignore à la racine de votre projet et ajoutez simplement cette ligne :
.envAinsi, lorsque vous ferez un git commit, Git ignorera totalement votre fichier contenant les mots de passe. Votre code source pourra être rendu public en toute sécurité, tandis que vos secrets resteront bien au chaud sur votre machine.
Bonnes pratiques supplémentaires
Pour travailler efficacement et proprement avec les variables d’environnement PHP en équipe, voici quelques recommandations :
- Créez un fichier
.env.example: Puisque le fichier.envn’est pas partagé sur Git, vos collaborateurs (ou vous-même dans 6 mois) ne sauront pas quelles variables sont nécessaires au fonctionnement du projet. Créez un fichier.env.examplecontenant les clés avec des valeurs vides ou factices, et commitez-le ! - Ne mettez pas de commentaires sur la même ligne : Évitez d’écrire
DB_USER=root # utilisateur local. Certains parseurs pourraient inclure le commentaire dans la valeur. Placez plutôt vos commentaires sur la ligne du dessus. - Utilisez des majuscules : Par convention universelle, les noms des variables d’environnement s’écrivent toujours en majuscules avec des tirets du bas (SNAKE_CASE).
