Michael Schröpl: über http verzeichnisstruktur auslesen?

Beitrag lesen

Hallo Moritz,

ist es irgendwie möglich über http die verzeichnisstruktur eines servers auszulesen?

Wenn Du damit meinst "durch HTTP-Anforderungen an den Server von einem entfernten Rechner aus", dann lautet die Antwort darauf "nein".

Das ist übrigens keine Frage der Sicherheitseinstellungen, sondern liegt alleine schon daran, daß ein HTTP-Server üblicherweise eine beliebige, von außen nicht einsehbare Abbildung zwischen URL-Baum und Verzeichnisbaum durchführt (Apache: "Alias").
Via HTTP kannst Du ggf. den URL-Baum lesen, aber welcher Verzeichnisbaum tatsächlich dahinter liegt, das verbirgt HTTP vor Dir.

und wenn ja wie?

Den URL-Baum lesen lassen kannst Du im Prinzip so, wie Du es auch manuell tun würdest:
1. Rate eine Einsprungstelle (z. B. '/')
2. Lies das entsprechende Dokument
3. Extrahiere alle Referenzen aus diesem Dokument, welche auf dieselbe Domain verweisen (das sind nicht nur Links, sondern auch Bilder, Javascript- und CSS-Referenzen, nicht zu vergessen Frames usw.).
4. Für jedes so gefundene neue (!) Dokument beginne erneut bei 2.

Such doch mal im WWW nach dem Quelltext von Suchmaschinen-Spidern oder Links-Checkern - beide arbeiten im Wesentlichen nach dem obigen Prinzip. Das ist auch der Grund dafür, warum einige Suchmaschinen mit Framesets nicht klar kommen: Sie extrahieren nur normale Links und ignorieren andere HTML-Tags, die ebenfalls auf weitere Dateien referenzieren würden.

und wie kann man das so einstelles, dass nur noch ein cgi-script das kann?

Zunächst einmal: Man kann es sogar so einstellen, daß nicht mal ein CGI-Skript das darf!

Ein CGI-Skript dürfte auf dem Server, auf dem es installiert ist (und _nur_ dort) statt über HTTP direkt auf Dateien und Verzeichnisse zugreifen - und damit auch den gesamten Verzeichnisbaum einlesen und ausgeben.
Vorausgesetzt ist dabei allerdings, daß die Benutzerkennung, unter welcher dieses CGI-Skript läuft, das Leserecht auf sämtliche Verzeichnisse der Maschine besitzt - und das wäre in der Tat ein schlecht konfigurierter Webserver, wenn er Dir gleichzeitig erlauben würde, dort eigene CGI-Skripte zu installieren. (Dann hättest Du ggf. auch Leserecht auf die Webserver-Konfiguration.)
Üblicherweise läuft der Webserver (und die von ihm gestarteten CGI-Skripte ebenfalls) auf einer UNIX-Maschine unter einer Benutzerkennung, welche so gut wie nichts darf. Das ist der Grund, weshalb man bei einigen Providern eigene Dateien, die von einem CGI-Skript bearbeitet werden sollen, zugreifbar für _alle_ Benutzer machen muß.

Eleganter, aber schwieriger zu installieren ist es, eine Schale um die Ausführung von CGI-Skripten zu legen (CGI-Wrapper), welche dem Aufruf des Skripts aus dem URL erkennen kann, welcher Benutzerkennung dieses Skript gehört, und das Skript dann auch unter genau dieser Benutzerkennung ausführt - dann kann der Besitzer dieses Skripts wenigstens seine eigenen Dateien und Verzeichnisse gegenüber anderen CGI-Benutzern desselben Servers schützen. Es wird dann per Server-Konfiguration gar nicht mehr das eigentliche CGI-Skript, sondern zunächst mal der Wrapper aufgerufen (mit dem Pfad zum Skript als Parameter - der Wrapper wechselt dann auf die gewünschte Benutzerkennung und startet schließlich selbst das eigentliche CGI-Skript), und der direkte Aufruf des CGI-Skripts (welcher dann unter der 'falschen' Benutzerkennung laufen würde) muß explizit unterbunden werden (kein "echtes" /cgi-bin-Verzeichnis mehr, außer für den Wrapper selbst). Eine Methode dazu wäre es z. B., im Apache den URL mit Hilfe von mod_rewrite so dynamisch umzuschreiben, daß der Wrapper davor gesetzt und der Skript-URL als QUERY_STRING übergeben wird.

Viele Grüße
      Michael