Aller au contenu

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.

Text
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 :

Text
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 alias X-Rudel-Sandbox)
  • le cookie rudel_environment (ancien alias rudel_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 --url dont 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_DIR sur le répertoire tmp du bac à sable
  • définit WP_CACHE_KEY_SALT sur 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_DEBUG dans le bac à sable debug.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 :

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