web-dev-qa-db-fra.com

Comment définir dynamiquement des modèles d'hôte de confiance?

Je travaille sur un site qui utilise le module Groups qui permettra aux utilisateurs de créer des groupes sur le site. Le site permettra ensuite aux utilisateurs de pointer des noms de domaine personnalisés sur le site, le contenu de leur groupe étant disponible sur ce domaine.

J'ai cette configuration, à l'exception des modèles d'hôtes de confiance. Pour le moment, je dois ajouter manuellement les domaines à $settings['trusted_Host_patterns'] Dans settings.php. Cependant, je ne veux pas avoir à gérer cela manuellement et je voudrais définir ces modèles d'hôtes approuvés de manière dynamique en fonction des noms de domaine stockés dans un champ de la base de données.

J'ai regardé DrupalKernel::initializeSettings(), et j'ai constaté qu'il ne semble pas exister de méthode pour remplacer les paramètres:

// Initialize our list of trusted HTTP Host headers to protect against
// header attacks.
$Host_patterns = Settings::get('trusted_Host_patterns', []);
if (PHP_SAPI !== 'cli' && !empty($Host_patterns)) {
  if (static::setupTrustedHosts($request, $Host_patterns) === FALSE) {
    throw new BadRequestHttpException('The provided Host name is not valid for this server.');
  }
}

Je pense donc que je pourrais peut-être utiliser un événement du noyau, en ajoutant des modèles d'hôte de confiance aux paramètres avant l'appel des modèles d'hôte de confiance, mais je commence à penser que je n'ai peut-être pas de chance, car des hôtes de confiance sont définis avant la la connexion à la base de données est initialisée, ce qui signifie que je ne pourrai pas définir de modèles d'hôtes approuvés à partir de variables de base de données.

Quelqu'un at-il une idée de la façon de contourner ce problème?

3
Jaypan

De par sa conception, vous ne pouvez pas accéder à la base de données à partir d'un hôte non approuvé au sein de Drupal. Le noyau vérifie les modèles d'hôte de confiance lorsque les paramètres sont lus à partir du fichier, mais sans les paramètres, vous n'avez pas les informations d'identification pour ouvrir la connexion à la base de données.

Il existe de nombreuses façons de contourner ce problème. Comme mentionné dans le commentaire de @NoSssweat, vous pouvez écrire les hôtes de confiance dans un fichier et inclure le fichier dans settings.php. Ou vous pouvez accéder à la base de données depuis l'extérieur de Drupal et invoquer ce script PHP dans settings.php. Ou utiliser un modèle d'hôte de confiance générique correspondant à tous les domaines possibles et puis améliorez la sécurité en ajoutant une deuxième vérification par rapport aux noms de domaine personnalisés dans un abonné aux événements du noyau lorsque la base de données est disponible.

5
4k4