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

- Auteur : WordPress Développement
- Publié le : 2020-08-03
- Mis à jour le : 2020-08-03
- Catégorie : Sécurité
- URL : https://www.wpmoderne.fr/securite/smtp-wp-config-identifiants-messagerie/

## L’essentiel

- 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

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