Ich habe meine Seite auf dem Server
http://www.myserver.uk.com
Dafür habe ich zwei Domains,
http://one.com
und
http://two.com
Ich würde gerne mit PHP die aktuelle Domain bekommen, aber wenn ich sie benutze $_SERVER['HTTP_HOST']
dann zeige mir das
myserver.uk.com
anstatt:
one.com or two.com
Wie kann ich die Domain erhalten, nicht den Servernamen?
Ich habe PHP Version 5.2.
$_SERVER['HTTP_HOST']
. Wenn die Websitesone.com
undtwo.com
mithilfe eines (i) Frames "umgeleitet" werden, stammt die Seite selbst immer noch von myserver.uk.com, sodass Sie nicht die echte Domain erhalten. Wofür ist die HTML-Quelleone.com
?Antworten:
Versuchen Sie Folgendes:
$_SERVER['SERVER_NAME']
Oder analysieren
quelle
HTTP_X_ORIGINAL_HOST
kann vom Benutzer geändert werden und ist nicht vertrauenswürdig. Dies ist möglicherweise nicht immer ein Problem, aber es ist etwas, das Sie beachten sollten.Die beste Verwendung wäre
Und es kann so verwendet werden:
Mit dem folgenden Code können Sie alle Variablen in $ _SERVER in einer strukturierten HTML-Ausgabe anzeigen, wobei Ihre Schlüsselwörter hervorgehoben sind und direkt nach der Ausführung angehalten werden. Da ich manchmal vergesse, welches ich selbst verwenden soll, denke ich, dass dies geschickt sein kann.
quelle
Mit
$_SERVER['HTTP_HOST']
bekommt ich (Subdomain.) Maindomain.extension. Es scheint mir die einfachste Lösung zu sein.Wenn Sie tatsächlich über einen iFrame umleiten, können Sie einen GET- Parameter hinzufügen , der die Domäne angibt.
Anschließend können Sie eine Sitzungsvariable festlegen, die diese Daten in Ihrer gesamten Anwendung beibehält.
quelle
Der einzig sichere Weg, dies zu tun
Alle anderen Antworten auf dieser Seite haben Auswirkungen auf die Sicherheit, die Sie beachten müssen.
Die meisten Frameworks kümmern sich darum, die Domain für Sie zu speichern. Lesen Sie daher die Dokumentation zu Ihrem speziellen Framework. Wenn Sie kein Framework verwenden, sollten Sie die Domain an einem der folgenden Orte speichern:
+ --------------------------------------------- --- + ----------------------------------- +
| Sichere Methoden zum Speichern der Domain | Verwendet von |
+ --------------------------------------------- --- + ----------------------------------- +
| Eine Konfigurationsdatei | Joomla, Drupal / Symfony |
| Die Datenbank | WordPress |
| Eine Umgebungsvariable | Laravel |
| Eine Serviceregistrierung | Kubernetes DNS |
+ --------------------------------------------- --- + ----------------------------------- +
Sie können Folgendes verwenden ... aber sie sind unsicher
Hacker können diese Variablen dazu bringen, jede gewünschte Domäne auszugeben. Dies kann zu Cache-Vergiftungen und kaum wahrnehmbaren Phishing-Angriffen führen.
Dadurch wird die Domain aus den Anforderungsheadern abgerufen, die von Hackern manipuliert werden können . Das gleiche mit:
Dieser kann verbessert werden, wenn die Apache-Einstellung usecanonicalname deaktiviert ist. In diesem Fall
$_SERVER['SERVER_NAME']
darf es nicht mehr mit beliebigen Werten gefüllt werden und ist sicher. Dies ist jedoch nicht die Standardeinstellung und bei einem Setup nicht üblich.In gängigen Systemen
Im Folgenden erfahren Sie, wie Sie die aktuelle Domain in den folgenden Frameworks / Systemen abrufen können:
WordPress
Wenn Sie eine URL in WordPress erstellen , verwenden Sie einfach home_url oder site_url oder eine der anderen URL-Funktionen .
Laravel
Die
request()->getHost
Funktion wurde von Symfony geerbt und ist seit dem Patchen des CVE-2013-4752 2013 sicher .Drupal
Das Installationsprogramm kümmert sich noch nicht darum, dies sicher zu machen ( Problem # 2404259 ). In Drupal 8 gibt es jedoch eine Dokumentation, die Sie in den Einstellungen für vertrauenswürdige Hosts befolgen können , um Ihre Drupal-Installation zu sichern. Anschließend können Sie Folgendes verwenden:
Andere Rahmenbedingungen
Sie können diese Antwort jederzeit bearbeiten, um anzugeben, wie Sie die aktuelle Domain in Ihr bevorzugtes Framework aufnehmen können. Fügen Sie dabei bitte einen Link zum entsprechenden Quellcode oder zu anderen Elementen hinzu, mit denen ich überprüfen kann, ob das Framework die Dinge sicher ausführt.
Nachtrag
Ausbeutungsbeispiele:
Eine Cache-Vergiftung kann auftreten, wenn ein Botnetz kontinuierlich eine Seite mit dem falschen Host-Header anfordert. Der resultierende HTML-Code enthält dann Links zur Website des Angreifers, auf der er Ihre Benutzer fischen kann. Zuerst werden die böswilligen Links nur an den Hacker zurückgesendet. Wenn der Hacker jedoch genügend Anfragen ausführt, landet die böswillige Version der Seite in Ihrem Cache, wo sie an andere Benutzer verteilt wird.
Ein Phishing-Angriff kann auftreten, wenn Sie Links basierend auf dem Host-Header in der Datenbank speichern. Angenommen, Sie speichern die absolute URL zu den Profilen eines Benutzers in einem Forum. Durch die Verwendung des falschen Headers kann ein Hacker jedem, der auf seinen Profillink klickt, eine Phishing-Site senden.
Eine Vergiftung durch Zurücksetzen von Passwörtern kann auftreten, wenn ein Hacker beim Ausfüllen des Formulars zum Zurücksetzen von Passwörtern für einen anderen Benutzer einen böswilligen Host-Header verwendet. Dieser Benutzer erhält dann eine E-Mail mit einem Link zum Zurücksetzen des Passworts, der zu einer Phishing-Site führt.
Hier sind einige weitere böswillige Beispiele
Zusätzliche Vorsichtsmaßnahmen und Hinweise:
$_SERVER['SERVER_NAME']
mit demselben Header$_SERVER['HTTP_HOST']
gefüllt, der sowieso verwendet worden wäre (plus Port). Dies ist das Standard-Setup von Apache. Wenn Sie oder Entwickler dies aktivieren, sind Sie in Ordnung, aber möchten Sie sich wirklich auf ein separates Team oder auf sich selbst in drei Jahren in der Zukunft verlassen, um eine scheinbar geringfügige Konfiguration bei einem Nicht-Team beizubehalten -Standardwert? Auch wenn dies die Sicherheit erhöht, würde ich davor warnen, mich auf dieses Setup zu verlassen.$_SERVER['SERVER_NAME']
wird nicht die aktuelle Domäne zurückgegeben, sondern der Wert der Anweisung serverName.Little Rant:
Diese Frage erhielt Hunderttausende von Ansichten ohne eine einzige Erwähnung der vorliegenden Sicherheitsprobleme! Es sollte nicht so sein, aber nur weil eine Stapelüberlauf-Antwort beliebt ist, heißt das nicht, dass sie sicher ist.
quelle
$urlparts['path']
nicht festgelegt ist, wenn er im Stammverzeichnis der Domäne installiert ist. Andernfalls wird$urlparts['path']
das Unterverzeichnis zurückgegeben.Versuchen Sie es
$_SERVER['SERVER_NAME']
.Tipps: Erstellen Sie eine PHP-Datei, die die Funktion aufruft,
phpinfo()
und lesen Sie den Abschnitt "PHP-Variablen". Es gibt eine Reihe nützlicher Variablen, an die wir dort nie denken.quelle
Ich weiß, dass dies möglicherweise nicht vollständig mit dem Thema zu tun hat, aber meiner Erfahrung nach finde ich es nützlich, das WWW der aktuellen URL in einer Variablen zu speichern.
Bearbeiten: Zusätzlich lesen Sie bitte meinen Kommentar unten, um zu sehen, worum es geht.
Dies ist wichtig, wenn Sie festlegen möchten, ob Ajax-Anrufe mit oder ohne "www" versendet werden sollen:
Beim Versenden eines Ajax-Anrufs muss der Domänenname mit dem in der Adressleiste des Browsers übereinstimmen. Andernfalls wird Uncaught SecurityError in der Konsole angezeigt .
Deshalb habe ich diese Lösung gefunden, um das Problem zu beheben:
Führen Sie dann basierend darauf, ob $ WWW wahr oder falsch ist, den richtigen Ajax-Aufruf aus.
Ich weiß, dass dies trivial klingen mag, aber dies ist ein so häufiges Problem, über das man leicht stolpern kann.
quelle
window.location
. In PHP hast duSERVER_NAME
.Jeder verwendet die
parse_url
Funktion, aber manchmal übergibt der Benutzer das Argumet in einem anderen Format.Um dies zu beheben, habe ich die Funktion erstellt. Überprüfen Sie dies heraus:
Übergeben Sie einfach die URL und erhalten Sie die Domain.
Beispielsweise,
wird das Ergebnis zurückgeben wird sein
Und in einigen Situationen:
Und es wird auch zurückkehren
stackoverflow.com
.quelle
// um die Domain zu bekommen
// Domain mit Protokoll
// Protokoll, Domain, AbfrageString gesamt ** Da $ _SERVER ['SERVER_NAME'] für Multi-Domain-Hosting nicht zuverlässig ist!
quelle
Versuchen Sie einfach:
quelle