Isolation
Rudel est un système de superposition sélectionné par requête. Une requête sélectionnée utilise les tables de base de données et les fichiers de thème du bac à sable, tout en s’exécutant dans l’installation WordPress de l’hôte.
Isolé dans chaque bac à sable
Tables WordPress
Chaque bac à sable reçoit un préfixe de table généré : le préfixe de l’hôte suivi des sept premiers caractères hexadécimaux du MD5 de l’ID du bac à sable.
wp_b65338d_options
wp_b65338d_posts
wp_b65338d_users
Rudel modifie le préfixe de table WordPress avant la fin du démarrage de WordPress, afin que chaque requête d’une requête de bac à sable lise et écrive dans les copies du bac à sable.
Utilisateurs
Les tables users et usermeta sont clonées avec les autres. À sa création, un bac à sable contient les utilisateurs et mots de passe de l’hôte ; ensuite, les utilisateurs créés, modifiés ou supprimés dans le bac à sable n’affectent pas l’hôte, et les modifications de l’hôte ne sont pas répercutées dans le bac à sable.
Fichiers du thème actif
Le thème sélectionné est copié dans le répertoire du bac à sable :
wp-content/rudel-environments/{environment_id}/themes/{theme_slug}
Si le thème est un thème enfant, Rudel copie également le thème parent afin de préserver la relation entre les modèles. Un bac à sable sert toujours le thème enregistré à sa création ; changer de thème dans le bac à sable n’a aucun effet.
Partagé avec l’hôte
- le cœur WordPress
- les fichiers des extensions
- les fichiers médias téléversés
Une extension installée ou mise à jour sur l’hôte l’est pour chaque bac à sable. Les extensions actives sont enregistrées dans la table des options ; leur état d’activation est donc propre à chaque bac à sable. Les fichiers téléversés depuis un bac à sable sont placés dans le répertoire des téléversements de l’hôte. Cela accélère la création des bacs à sable et évite de remplacer WP_CONTENT_DIR globalement.
Laissez Rudel activé dans chaque bac à sable. Le blocage des e-mails et la superposition du thème s’exécutent depuis l’extension ; la désactiver alors qu’un bac à sable est sélectionné supprime également la ligne d’initialisation du fichier wp-config.php partagé, ce qui désactive la sélection des bacs à sable pour toute l’installation (problème n° 13).
Sélectionner un bac à sable
Les requêtes HTTP sélectionnent un bac à sable au moyen de :
- l’en-tête
X-Rudel-Environment(ancien aliasX-Rudel-Sandbox) - le cookie
rudel_environment(ancien aliasrudel_sandbox)
Rudel ne définit ni n’efface jamais le cookie. Supprimez-le pour revenir à l’hôte ; l’élément Bac à sable de la barre d’administration renvoie vers l’URL hôte, mais conserve le cookie (problème n° 10).
Les commandes WP-CLI sélectionnent un bac à sable au moyen de :
- la variable d’environnement
RUDEL_ENVIRONMENT - une
--urldont l’hôte commence par l’ID du bac à sable, par exemple--url=http://alpha-3be7.example.test
Le sélecteur n’est pas authentifié. Tout client pouvant accéder au site et envoyer un ID de bac à sable valide obtient ce bac à sable, et les ID (nom suivi de quatre caractères hexadécimaux) sont faciles à deviner. Ne considérez pas la sélection d’un bac à sable comme une limite de contrôle d’accès ; protégez un hôte public au niveau du serveur web ou du réseau.
Valeurs par défaut des requêtes
Pour une requête sélectionnée, Rudel :
- bloque les e-mails sortants au moyen d’un filtre
pre_wp_mail - définit
WP_TEMP_DIRsur le répertoiretmpdu bac à sable - définit
WP_CACHE_KEY_SALTsur une valeur propre au bac à sable afin que les caches d’objets persistants séparent les clés du bac à sable - propose la journalisation
WP_DEBUGdans le bac à sabledebug.log, ainsi que des clés et sels d’authentification dérivés de son ID
L’initialisation définit chacune de ces constantes uniquement si wp-config.php ne l’a pas déjà définie. Une installation wp-config.php standard définit WP_DEBUG ainsi que toutes les clés et tous les sels ; sur une telle installation, les requêtes de bac à sable utilisent donc le réglage de débogage de l’hôte et ses clés et sels (problème n° 4). Les utilisateurs étant également clonés, un cookie de connexion de l’hôte peut être valide dans un bac à sable.
Métadonnées d’exécution
Les métadonnées d’exécution de Rudel restent dans les tables MySQL WordPress de l’hôte :
wp_rudel_environments
wp_rudel_worktrees
Ces tables sont la source de vérité de Rudel. Les répertoires d’environnement contiennent des fichiers et des artefacts gérés, et non l’état du registre d’exécution.