opendir("/")

Alles, was PHP betrifft, kann hier besprochen werden.

opendir("/")

Postby Timm » 18. September 2005 12:01

Ich habe ein kleines PHP-Script geschrieben, welches den Inhalt des Root-Verzeichnises ausgeben soll.
Code: Select all
$dirHandle = opendir("/");

while( ($file=readdir($dirHandle)) !== false )
{
   if($file =="." || $file == "..")
      continue;
      
   echo $file . "<br>";
}


Wenn ich dieses Script nun in das Standardverzeichnis htdocs lege und ausführe, werden mir allerdings alle Dateien und Ordner des Laufwerks angezeigt (d.h. der Ordner ist: C:\)
Ich möchte allerdings, dass der Zugriff nur auf das vom Apache festgelegte DocumentRoot beschränkt bleibt, damit ich nicht ungewollterweise irgendwelche Dateien auf meiner Platte beschädigen kann.
Welche Einstellungen muss ich ändern?
Timm
 
Posts: 8
Joined: 18. September 2005 11:48

Postby Wiedmann » 18. September 2005 12:13

Ich habe ein kleines PHP-Script geschrieben, welches den Inhalt des Root-Verzeichnises ausgeben soll.

Die Dateifunktionen von PHP arbeiten eben direkt mit dem Dateisystem und werden vom Apache nicht beeinflusst.

Und das Root "/" von deiner Platte ist halt das Hauptverzeichis von z.B. C: (wenn der XAMPP auf C installiert ist).

Ich möchte allerdings, dass der Zugriff nur auf das vom Apache festgelegte DocumentRoot beschränkt bleibt, damit ich nicht ungewollterweise irgendwelche Dateien auf meiner Platte beschädigen kann.

Bleibt dir nur, nicht "/" zu benutzen sondern den richtigen Pfad. Du könntest höchstens noch open_basedir setzen, dann bekommst du einen Fehler, wenn du versuchst auf etwas zuzugreifen ausserhalb dieses Directories.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Timm » 18. September 2005 12:25

Wiedmann wrote:
Ich möchte allerdings, dass der Zugriff nur auf das vom Apache festgelegte DocumentRoot beschränkt bleibt, damit ich nicht ungewollterweise irgendwelche Dateien auf meiner Platte beschädigen kann.

Bleibt dir nur, nicht "/" zu benutzen sondern den richtigen Pfad. Du könntest höchstens noch open_basedir setzen, dann bekommst du einen Fehler, wenn du versuchst auf etwas zuzugreifen ausserhalb dieses Directories.


Ok, dann werde ich darauf zurückgreifen. Wird das von Webhostern eigentlich genauso gehandhabt (z.B. bei Servern, die sich mehrere Kunden teilen)?
Timm
 
Posts: 8
Joined: 18. September 2005 11:48

Postby zAp!! » 18. September 2005 15:34

Das geht auch einfacher:
Code: Select all
opendir(./)

Jedoch muss dein Skript dann im Root Verzeichnis sein. Sonst kannst du auch den relativen Pfad benützen:
Code: Select all
opendir(../verzeichnis1/verzeichnis2/)

ich finde, das das am einfachsten ist.
Schau dir dazu diesen Code an:
http://www.fabians-webdesign.de/d-web/php/file_dir_read.htm
mfg zAp!!
Anti Mysql User
because use VDB as your DB!
http://www.zap.de.tk
User avatar
zAp!!
 
Posts: 38
Joined: 28. August 2005 19:34
Location: A-Feldkirch

Postby Wiedmann » 18. September 2005 17:19

Das geht auch einfacher:
Code: Select all
opendir(./)

Würde einen Fehler produzieren (Strings gehören gequoted).

Jedoch muss dein Skript dann im Root Verzeichnis sein.

Wieso muss das Script dazu im Root-Verzeichnis sein? (BTW meinst du bestimmt im Document_Root)

Sonst kannst du auch den relativen Pfad benützen:

Wieso sonst? "./" ist ein relativer Pfad. Ausgehen vom aktuellem Verzeichnis oder einem Verzeichnis das bei den Includepaths aufgeführt ist. Womit diese Methode dann theoretisch schon ausgeschlossen ist, wenn er definitiv ein bestimmtes Verzeichnis ansprechen will.

Hab diese Möglichkeit aber tatsächlich vergessen aufzuführen. Auch wenn ich persönlich da noch ein realpath() aussen herum mach.

Abgesehen davon, dass er so ja immernoch auf ander Pfade zugreifen kann (wenn er sie angibt). Und das will er ja verhindern.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 56 guests