web-dev-qa-db-fra.com

Que signifie «le nom d'hôte fourni n'est pas valide pour ce serveur»?

J'utilise un site Web Drupal 8, et lorsque je navigue sur une page, j'obtiens une page blanche simple avec juste le message d'erreur suivant.

Le nom d'hôte fourni n'est pas valide pour ce serveur.

Qu'est-ce que ça veut dire? Comment puis-je réparer ça?

69
mpdonadio

Ce message d'erreur provient d'un fonctionnalité qui a été ajouté à Drupal 8 à protection contre les attaques d'en-tête de l'hôte HTTP . La fonctionnalité est également décrite dans le change record qui a été généré pour le patch.

Essentiellement, il était possible d'usurper le en-tête de l'hôte HTTP à des fins malveillantes, et d'inciter Drupal à utiliser un nom de domaine différent dans plusieurs sous-systèmes (en particulier la génération de liens). en d'autres termes, l'en-tête de l'hôte HTTP doit être considéré comme une entrée utilisateur et non approuvé.

Pour lutter contre cela, un nouveau paramètre, $settings['trusted_Host_patterns'], a été ajouté à Drupal 8 pour configurer une liste de noms d'hôtes "de confiance" à partir desquels le site peut s'exécuter. Le paramètre doit être un tableau de modèles d'expression régulière, sans délimiteurs, représentant le les noms d'hôte dont vous souhaitez autoriser l'exécution.

Par exemple, si vous exécutez votre site à partir d'un seul nom d'hôte "www.example.com", vous devez l'ajouter à vos paramètres (généralement trouvé dans ./sites/default/settings.php):

$settings['trusted_Host_patterns'] = array(
  '^www\.example\.com$',
);

Noter la ^, \., et $. Ce sont Syntaxe PCRE . Cela signifie simplement que vous voulez faire correspondre "www.example.com" avec précision, sans rien de plus au début et à la fin, et que les points doivent être traités comme des points et non comme des caractères génériques.

Si vous utilisez "example.com", utilisez simplement:

$settings['trusted_Host_patterns'] = array(
  '^example\.com$',
);

Si vous devez exécuter un site de plusieurs domaines et/ou sous-domaines et que vous ne faites pas de redirection d'URL canonique, votre paramètre ressemblera à ceci:

$settings['trusted_Host_patterns'] = array(
  '^example\.com$',
  '^.+\.example\.com$',
  '^example\.org',
  '^.+\.example\.org',
);

Cela permet au site de fonctionner avec toutes les variantes de example.com et example.org, avec tous les sous-domaines inclus.

Une fois que vous avez ajusté $settings['trusted_Host_patterns'] à la valeur appropriée, vous devriez pouvoir à nouveau naviguer sur votre site.

Vous pouvez également vérifier l'état de vos paramètres d'hôte de confiance à partir de la page de rapport d'état, qui se trouve dans admin/reports/status

Si vous supprimez complètement le paramètre, le mécanisme de l'hôte de confiance ne sera pas utilisé et vous verrez une erreur sur la page du rapport d'état. En outre, votre site peut également être victime d'attaques d'en-tête d'hôte HTTP vulnérables.

Si ce paramètre est configuré et que vous voyez ce message, cela signifie probablement que vous avez foiré la syntaxe des expressions régulières. Dans ce cas, prenez le premier exemple, copiez/collez dans vos paramètres, puis modifiez-le pour refléter le nom d'hôte à partir duquel votre site s'exécute.

88
mpdonadio

pour l'installation localhost, vous pouvez utiliser le code suivant dans votre fichier settings.php

$settings['trusted_Host_patterns'] = array(
   '^localhost$','^YOUR_IP_ADDRESS$'
 );
7
Mohan Gathala

Cela se produit car trusted_Host_patterns variable dans votre fichier de paramètres. Si vous travaillez sur l'environnement local et que vous souhaitez remplacer cela, définissez la section suivante dans votre settings.local.php fichier:

/*
 * Drupal Trusted Host Patterns
 */
$settings['trusted_Host_patterns'] = [];

Ou plus modèle générique :

$settings['trusted_Host_patterns'] = [ '.*' ];

Ou plus spécifique aux environnements locaux :

$settings['trusted_Host_patterns'] = array(
  '^172\.20.\0.\3$',
  '^localhost$',
);

C'est la solution la plus simple, mais non recommandée car vous devez définir les valeurs appropriées pour éviter d'usurper l'en-tête de l'hôte HTTP à des fins malveillantes. Si votre site Web ne fonctionne que sur votre section locale, cela devrait aller.

Voir: Nouveau paramètre pour la configuration du nom d'hôte approuvé .

5
kenorb

Ce problème se produira également si vous avez

<VirtualHost *:443>

quand tu aurais dû

<VirtualHost *:80>

installé dans une configuration non SSL (comme pour les environnements de développement/test) et essayez d'accéder au site sur le port 80

3
Neil Davis

Cela est dû à la configuration d'hôte de confiance du serveur. Il peut se produire lorsque vous modifiez le nom de domaine ou 'trusted_Host_patterns'. Pour résoudre le problème, ajoutez votre nouveau domaine au DRUPAL_ROOT/sites/SITE_FOLDER/settings.php (Ex: sites/defaults/settings.php)

Exemple: nom de domaine = nouveaudomaine.com

$settings['trusted_Host_patterns'] = array(
  '^newdomain.com\.loc$',
  '^www\.newdomain.com\.loc$',
);
0
Jimmy

Vous devez créer un virtualhots dans Apache2

DocumentRoot/Users/mac/www/ServerName localhost

<Directory "/Users/mac/www">
  AllowOverride All
0