# « wp_salt : une valeur unique par installation, sans dépendre d’une constante »

> Coder en dur une chaîne secrète dans une extension revient à partager le même secret sur tous les sites qui l'installent. Une fonction native évite ce piège.

- Auteur : WordPress Développement
- Publié le : 2022-03-06
- Mis à jour le : 2022-03-06
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/wp-salt-valeur-unique-par-installation/

## L’essentiel

- Génère une valeur dérivée des clés de sécurité propres à chaque site
- Change automatiquement si les clés sont régénérées
- Évite de stocker un secret codé en dur dans le code d'une extension

Une extension qui a besoin de signer une valeur temporaire — un jeton de désinscription, un lien de prévisualisation signé, un identifiant de session côté client — a besoin d'un secret. La solution la plus rapide, coder une chaîne fixe directement dans le code source de l'extension, est aussi la moins sûre : ce secret serait alors identique sur tous les sites qui installent cette extension, un client aussi bien qu'un attaquant qui aurait accès au code source public.

`wp_salt()` résout ce problème en s'appuyant sur les clés de sécurité définies dans le fichier `wp-config.php` de chaque installation, propres à chaque site et généralement générées de façon aléatoire à l'installation.

## Ce que fait wp_salt()

La fonction retourne une chaîne dérivée des constantes de sécurité (`AUTH_KEY`, `AUTH_SALT`, etc.) et, en leur absence, d'une valeur de secours stockée en base de données. Un paramètre optionnel appelé `scheme` permet de cibler un jeu de clés particulier parmi ceux utilisés en interne par WordPress : `auth`, `secure_auth`, `logged_in` ou `nonce`.

> L'essentiel à retenir : Génère une valeur dérivée des clés de sécurité propres à chaque site ; Change automatiquement si les clés sont régénérées ; Évite de stocker un secret codé en dur dans le code d'une extension

```
$secret = wp_salt( 'auth' );

$jeton = hash_hmac( 'sha256', 'action_specifique_' . $user_id, $secret );
```

Ce jeton, propre à l'installation et à l'utilisateur concerné, peut ensuite être transmis dans une URL ou un formulaire pour vérifier plus tard qu'il n'a pas été altéré, sans jamais exposer le secret lui-même.

## Pourquoi ne pas simplement utiliser une constante personnalisée

- Une constante définie par l'extension elle-même, avec une valeur par défaut codée en dur, expose ce secret dans le code source distribué, visible par quiconque installe l'extension.
- S'appuyer sur `wp_salt()` garantit une valeur différente sur chaque site, sans configuration supplémentaire demandée à l'utilisateur final de l'extension.
- Si les clés de sécurité sont régénérées (bonne pratique après un incident de sécurité suspecté), tous les jetons dérivés via `wp_salt()` deviennent automatiquement invalides, ce qui est le comportement souhaité.

## Ne pas confondre avec wp_generate_password

`wp_generate_password()` sert à générer un nouveau mot de passe ou une chaîne aléatoire à un instant donné, différente à chaque appel. `wp_salt()` a un usage différent : produire une valeur stable dans le temps, réutilisable pour vérifier qu'un jeton généré plus tôt n'a pas été modifié, tant que les clés de sécurité du site ne changent pas.

### Les quatre schémas disponibles

| Schéma | Usage interne dans WordPress |
| --- | --- |
| `auth` | Cookies d'authentification standard |
| `secure_auth` | Cookies d'authentification en connexion sécurisée |
| `logged_in` | Cookie de session utilisateur connecté |
| `nonce` | Génération des nonces de sécurité |

> Un principe à retenir pour toute extension distribuée à plusieurs clients : jamais de secret codé en dur dans le code source. `wp_salt()` fournit une base fiable, déjà présente sur chaque installation, sans configuration supplémentaire à documenter.

## En résumé

Signer un jeton temporaire ne demande pas nécessairement d'ajouter une nouvelle constante ou une option en base de données : `wp_salt()` exploite ce qui existe déjà sur chaque site WordPress. Ce réflexe évite un secret partagé entre installations, une faiblesse discrète mais réelle dans du code distribué publiquement.
