wp-config dynamischer Hostname in WP_HOME und WP_SITEURL

Gibt es Nachteile bei der Verwendung des folgenden Codes zum Einrichten von WP_HOME und WP_SITEURL in wp.config für Einzelplatzinstallationen und Installationen mit mehreren Standorten:

/** * Site Host URLs */ $hostname = $_SERVER['HTTP_HOST']; if(isset($_SERVER['HTTP_X_FORWARDED_HOST']) && !empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { $hostname = $_SERVER['HTTP_X_FORWARDED_HOST']; } $protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ? 'https://' : 'http://'; $siteUrl = $protocol . rtrim($hostname, '/'); define('WP_HOME', $siteUrl); define('WP_SITEURL', $siteUrl); 

Ich weiß, dass ich nicht viel von einem Ruf als Kopfgeld habe, aber deine Antwort wird meine 100% ige Wertschätzung bekommen.

Solutions Collecting From Web of "wp-config dynamischer Hostname in WP_HOME und WP_SITEURL"

Das offensichtliche Problem besteht darin, dass Sie Benutzereingaben (http-Header) vertrauen, die Ihren Code vom Sicherheits-POV verdächtig machen.

Abgesehen davon, keine wirklichen Probleme damit, aber meine Erfahrung ist, dass solche Hacks die Tendenz haben, jedes Problem, das du auf diese Weise lösen willst, einfach an einen anderen Ort zu bringen.

Soweit ich das sehen kann (2 Jahre wordpress / woocommerce) habe ich immer WP_HOME und WP_SITEURL benutzt. Es macht es sehr einfach, die Website von einer Domain in eine andere zu verschieben, hatte nie Probleme damit, selbst wenn man E-Commerce-Shops bewegt. Vielleicht möchten Sie zum Admin-Panel gehen und dort Permalinks speichern, damit sie in der DB aktualisiert werden, aber normalerweise ist das nicht notwendig.

Achtung! Es werden keine Links (a, img src usw.) aktualisiert, die in der database gespeichert wurden. Wenn Sie beispielsweise einen Blog auf der Domain domainA.com haben, in dem Sie Bilder über den WYSIWYG-Editor eingefügt haben und jetzt zu domainB.com wechseln, versuchen alle Bilder in Ihrem Blog-Content weiterhin, von domainA.com zu laden. Dies liegt daran, dass WYSIWYG Verknüpfungen in voller Länge speichert, selbst wenn sie von Ihrer eigenen Domäne zur database gehören. Wenn Sie solche Inhalte haben, müssen Sie suchen und ersetzen gegen diese database.

Momentan kommen mir keine Probleme mehr in den Sinn, aber wenn ich mich an etwas erinnere, werde ich diesen Beitrag aktualisieren.

Bearbeiten

Wie bereits erwähnt, besteht beim Vertrauen ein Sicherheitsrisiko

 $_SERVER['HTTP_X_FORWARDED_HOST'] 

weil der Benutzer diesen Header einfach selber setzen kann.

Ich habe im Laufe der Jahre bei vielen CMS-Projekten einen ähnlichen Ansatz verfolgt. Es funktioniert wirklich gut für schnelle Entwicklung, aber es hat Probleme.

Wenn Sie darauf vertrauen können, dass der Webserver (apache, nginx) korrekt konfiguriert ist, können Sie mit $_SERVER['SERVER_NAME'] den vom Webserver konfigurierten Hostnamen abrufen. (Referenz: https://stackoverflow.com/questions/2297403/http-host-vs-servername )

Das heißt, HTTP_HOST ist sicherlich flexibler!

Wenn ich keine Kontrolle über Serverkonfigurationen habe, gebe ich im Allgemeinen eine Reihe von “erlaubten” Hosts an, die gesetzt werden können, und einen vernünftigen Standard. Beispielsweise:

 /** * Site Host URLs */ $hostname = $_SERVER['HTTP_HOST']; if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { $hostname = $_SERVER['HTTP_X_FORWARDED_HOST']; } $hostname = rtrim($hostname, '/'); $allowed = ['www.foo.com', 'dev.foo.com', 'staging.foo.com']; if (!in_array($hostname, $allowed)) { $hostname = 'www.foo.com'; } $protocol = (!empty($_SERVER['HTTPS']) || !empty($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; $siteUrl = $protocol . $hostname; define('WP_HOME', $siteUrl); define('WP_SITEURL', $siteUrl);