URL ermitteln
Norbert Kölln
- webserver
0 hotti0 Tom0 Beat0 Dennis0 Norbert Kölln
0 Dennis0 Beat0 Norbert Kölln0 Dennis
Moin, moin!
Wenn man als URL z. B. http://www.example.org/demo/ in die Adresszeile eines Browsers eingibt, entscheiden Einstellungen des Webservers darüber, was dem Anforderer ausgeliefert wird. Das könnte eine Auflistung der Dateien im spezifizierten Pfad sein oder auch eine bestimmte Seite.
Kann man im Falle einer ausgelieferten Seite deren vollständige URL herausfinden? Man könnte zunächst ausprobieren, ob eine der Anforderungen
http://www.example.org/demo/index.htm
http://www.example.org/demo/index.html
http://www.example.org/demo/index.php
... (welche Varianten kommen sonst noch häufig vor?)
zum selben Ergebnis führt.
Hintergrund: Es soll ein Seiteninhalt per PHP/curl eingelesen werden. Bei Verwendung einer URL ohne Angabe einer Datei ist das Ergebnis aber eine Fehlerseite.
Gibt es z. B. einem Browser übermittelte Informationen, die weder im Seitenquelltext enthalten sind, noch über die Anzeige der Seiteneigenschaften zu sehen sind? Wenn ja: Wie kommt man dran?
Viele Grüße,
Norbert Kölln
moin,
Gibt es z. B. einem Browser übermittelte Informationen, die weder im Seitenquelltext enthalten sind, noch über die Anzeige der Seiteneigenschaften zu sehen sind? Wenn ja: Wie kommt man dran?
1. nein, 2. gar nicht.
Weil: 1. kommt nur das zurück, was der Server hergibt und 2. ist damit auch geklärt :)
Hotte
Hello,
Kann man im Falle einer ausgelieferten Seite deren vollständige URL herausfinden? Man könnte zunächst ausprobieren, ob eine der Anforderungen
Die Frage kannst Du Dir beantworten, wenn Du mal einen HTTP-Sniffer benutzt:
z.B.: http://web-sniffer.net/
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Mahlzeit!
Besten Dank für den Tipp. Der genannte Sniffer liefert mir die benötigte Information nicht. Also gehe ich mal davon aus, dass eine solche Angabe nicht mit ausgeliefert wird.
Viele Grüße aus Hamburg in den schönen Oberharz,
Norbert
Offenbar verpasst dein phpcurl einen Redirect.
Du kannst HTTP Header im browser zum Beispiel mit dem FF Plugin Live HTTP Headers nachvollziehen.
Du solltest immer die Status Meldung eines Serverresponse berücksichtigen.
Im Fall eines Redirect steht danach die url, wo deine Ressource liegt.
mfg Beat
Hi Beat,
Offenbar verpasst dein phpcurl einen Redirect.
Man kann Curl aber auch dazu bewegen, Redirects zu folgen:
dennis@s1:~$ curl -h
…
-L/--location Follow Location: hints (H)
--max-redirs <num> Maximum number of redirects allowed (H)
Bei phpcurl kann man entsprechende Optionen auch mit curl_setopt() setzen.
Viele Grüße,
~ Dennis.
Moinsen!
Ein Redirect liegt leider nicht vor - dass hätte ich auch entdeckt.
Trotzdem vielen Dank,
Norbert
Tach!
FF steht mir im Moment nicht zur Verfügung. Aber bei Gelegenheit werde ich mal mit dem testen...
Viele Grüße,
Norbert
Hi Norbert,
http://www.example.org/demo/index.htm
http://www.example.org/demo/index.html
http://www.example.org/demo/index.php
... (welche Varianten kommen sonst noch häufig vor?)
Auf Linux-Servern auch häufig: index.cgi, index.php3, .php4, .php5, index.pl, index.xhtml, index.xml
Auf Windows-Servern mit IIS meist: Default.htm, Default.html, Default.aspx, etc.
Bei der Verwendung von Content-Negotiation heißen die Dateien dann z.B. index.de.html, index.en.html, index.html.de, index.html.en, natürlich auch in jeder anderen Dateiendung und/oder Sprache denkbar.
Der Apache sendet in manchen Fällen einen Header "Content-Location" mit dem Dateinamen, gehen z.B. mal auf http://httpd.apache.org/docs/2.2/ und schau dir die Response-Headers an. Allerdings finde ich gerade nicht die Konfigurationsdirektive mit der man das beeinflussen kann - beim DirectoryIndex jedenfalls scheint der Apache besagten Header nicht zu senden.
Zusammengefasst: Es gibt unendlich viele Möglichkeiten, was der Webserver dir ausliefern kann und in manchen Fällen wie z.B. bei einem Directory Listing muss ja gar nicht mal eine Datei dahinter stecken, wie du bereits selber erkannt hast. Realistisch gesehen hast du also keine Chance herauszufinden ob und welche Datei dahinter steckt.
Hintergrund: Es soll ein Seiteninhalt per PHP/curl eingelesen werden. Bei Verwendung einer URL ohne Angabe einer Datei ist das Ergebnis aber eine Fehlerseite.
Ich glaube vielmehr, dass du in deinem PHP-Programm irgendwo einen Fehler hast. Wenn du eine Seite mit curl abrufst, solltest du theoretisch dasselbe Ergebnis erhalten, wie wenn du die Seite mit einerm Browser abrufst.
Eventuell hat der Betreiber der Seite, welche du abrufen willst Curl als User-Agent blockiert und du erhältst deshalb eine Fehlerseite. Das lässt sich aber durch Manipulation des User-Agent Strings problemlos umgehen - dafür müsstest du uns aber etwas mehr über dein PHP-Programm bzw. die abzurufende Seite sagen.
Viele Grüße,
~ Dennis.
Ich glaube vielmehr, dass du in deinem PHP-Programm irgendwo einen Fehler hast. Wenn du eine Seite mit curl abrufst, solltest du theoretisch dasselbe Ergebnis erhalten, wie wenn du die Seite mit einerm Browser abrufst.
Eventuell hat der Betreiber der Seite, welche du abrufen willst Curl als User-Agent blockiert und du erhältst deshalb eine Fehlerseite. Das lässt sich aber durch Manipulation des User-Agent Strings problemlos umgehen - dafür müsstest du uns aber etwas mehr über dein PHP-Programm bzw. die abzurufende Seite sagen.
Ja und der UA-String ist eventuell nicht alles.
Da könnten Cookies im Spiel sein, oder der Server validiert den HTTP Request (zum Beispiel auf fehlende Accept Header).
mfg Beat
Nochmals moin, moin!
Mit den genannten Dateinamen werde ich es mal ausprobieren.
In das Thema Response-Headers werde ich mich mal einlesen. Ich kann die Konfiguration eines fremden Servers natürlich nicht beeinflussen, aber die Infos könnten hilfreich sein.
Das PHP-Programm ist vermutlich ok, es funktioniert mit anderen Seiten bei Angabe der vollständigen URL. Einen anderen User-Agent werde ich dem Server mal vorgaukeln. Das kriege ich allaein hin - hatte nur nicht an eine solche Möglichkeit gedacht.
Viele Grüße,
Norbert
Hi Norbert,
Das PHP-Programm ist vermutlich ok, es funktioniert mit anderen Seiten bei Angabe der vollständigen URL. Einen anderen User-Agent werde ich dem Server mal vorgaukeln. Das kriege ich allaein hin - hatte nur nicht an eine solche Möglichkeit gedacht.
Falls du Firefox verwendest, würde ich dir empfehlen mal die Live HTTP Headers Extension zu installieren, damit kannst du dir sowohl die Request-Header ansehen, die Firefox an den Server sendet, als auch die Response-Header, welche der Server zurückschickt.
Mein Firefox sendet für hier das Forum z.B. folgende Header:
GET /my/ HTTP/1.1
Host: forum.de.selfhtml.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cache-Control: max-age=0
Der Server kann theoretisch jeden Header auf Existenz oder Wert prüfen und abhängig davon dir eine andere Antwort senden. Im Zweifelsfall musst du musst du also jeden einzelnen dieser Header in deinem PHP-Script einbauen, um deinen Request genauso wie Firefox erscheinen zu lassen.
Viele Grüße,
~ Dennis.