Le WordPress d'aujourd'hui, décodé pour les développeurs

Sécurité

Sortir un identifiant SMTP en clair de wp-config.php avant qu’il ne devienne un risque

Un mot de passe de messagerie codé en dur dans wp-config.php peut ouvrir bien plus qu'un simple envoi d'email. Méthode pour l'en sortir proprement.

Par WordPress Développement • 3 août 2020 • 4 min de lecture • Aucun commentaire
Sortir un identifiant SMTP en clair de wp-config.php avant qu'il ne devienne un risque

define( 'SMTP_PASSWORD', 'MotDePasse2019!' );. Cette ligne, trouvée telle quelle dans le wp-config.php d’un site vitrine, illustre un réflexe très répandu : configurer l’envoi d’emails transactionnels (formulaires de contact, notifications de commande, réinitialisation de mot de passe) via un plugin SMTP, puis coller les identifiants du compte de messagerie directement dans le fichier de configuration de WordPress, par simplicité.

Le problème ne se limite pas à la délivrabilité des emails, déjà largement traitée ailleurs. Il tient à ce que représente réellement ce mot de passe : celui d’une boîte mail complète, avec potentiellement des années d’échanges professionnels, des factures, des accès à d’autres services via la fonction « mot de passe oublié ». Un wp-config.php mal protégé, un backup exporté par erreur dans un dossier public, ou une extension vulnérable qui lit les fichiers du système, et c’est cette boîte mail entière qui devient accessible.

Pourquoi wp-config.php n’est pas un coffre-fort

Ce fichier est censé rester inaccessible depuis le web grâce à la configuration du serveur, mais plusieurs scénarios le rendent lisible malgré tout : une erreur de configuration Nginx après une migration, une extension de sauvegarde qui exporte l’arborescence complète dans un fichier ZIP téléchargeable, ou simplement un accès FTP partagé avec un prestataire qui n’a pas besoin de voir ce mot de passe. Un fichier de configuration n’est jamais un espace de stockage de secrets à long terme, il est un point de passage.

Sortir le secret vers une variable d’environnement

L'essentiel à retenir : Un identifiant SMTP en clair vaut souvent plus qu'un mot de passe WordPress ; Les variables d'environnement isolent le secret du code ; Un test de non-régression avant de couper l'ancien réglage

La méthode la plus robuste consiste à ne plus écrire le mot de passe dans le code du tout, mais à le lire depuis l’environnement du serveur au moment de l’exécution :

// Dans wp-config.php
define( 'SMTP_USERNAME', getenv( 'WP_SMTP_USERNAME' ) );
define( 'SMTP_PASSWORD', getenv( 'WP_SMTP_PASSWORD' ) );

Le mot de passe lui-même est alors défini au niveau du serveur (fichier .env chargé par le pool PHP-FPM, variable définie dans la configuration du virtual host, ou secret injecté par l’hébergeur). Il ne transite jamais par un dépôt Git, ni par une sauvegarde de fichiers.

Vérifier que la lecture fonctionne avant de couper l’ancien réglage

Avant de retirer la valeur en dur, il faut confirmer que getenv() retourne bien la valeur attendue dans le contexte réel d’exécution de WordPress, pas seulement en ligne de commande. Un test simple :

add_action( 'admin_notices', function() {
    if ( current_user_can( 'manage_options' ) && ! getenv( 'WP_SMTP_PASSWORD' ) ) {
        echo '<div class="notice notice-error"><p>Variable SMTP absente de l\'environnement</p></div>';
    }
});

Ce garde-fou temporaire évite de découvrir la panne au moment où un client passe commande, un dimanche soir.

Une alternative quand les variables d’environnement ne sont pas disponibles

Sur certains hébergements mutualisés, l’accès aux variables d’environnement du serveur est limité. Dans ce cas, un fichier de secrets placé en dehors de la racine web, chargé explicitement par wp-config.php, reste une solution correcte :

  • Un fichier wp-secrets.php stocké un niveau au-dessus du dossier public, hors de portée d’Apache ou Nginx.
  • Un require explicite depuis wp-config.php, jamais versionné dans le dépôt du projet.
  • Des permissions restreintes sur ce fichier (lecture seule pour l’utilisateur du serveur PHP).

Changer le mot de passe après la migration

Une fois le nouveau mécanisme en place, il reste une étape que beaucoup sautent par flemme : changer le mot de passe SMTP lui-même. S’il a circulé en clair dans un fichier, dans un ticket de support ou dans un export de sauvegarde, il faut le considérer comme potentiellement compromis, même si rien ne le prouve.

Un identifiant qui a un jour existé en clair dans un fichier ne redevient jamais « sûr » simplement parce qu’on l’a déplacé ailleurs : il faut le changer.

Notre verdict

Sortir un identifiant SMTP de wp-config.php prend une demi-heure. Le risque qu’il fait courir, lui, peut durer des années si la boîte mail associée reste active. Le réflexe à adopter sur tout futur projet : aucun secret ne se code en dur, il se lit depuis l’environnement, point final.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi