dedlfix: PHP Probleme nach erstmaliger Servereinrichtung

Beitrag lesen

echo $begrüßung;

$ordner = $_GET['o'];
$dir = opendir ("../Bilder/Fotos/Web_klein/$ordner");
Das ist eine Sicherheitslücke. Wenn jemand als Parameter o statt eines einfachen Ordnernamens etwas wie ../../../ordnername übergibt, kann er auf beliebige Ordner zugreifen, für die der PHP-User das Leserecht hat. Prüfe vorher den Inhalt von $_GET['o'] auf unerlaubte Zeichen (beispielsweise den / ), bzw. dass nur erlaubte Zeichen drin sind (z.B. Buchstaben und Ziffern), oder gegen eine Liste der erlaubten Verzeichnisse.

Kannst du mir das genauer erklären? Ich hab das jetzt mal versucht und bei mir hat das nicht geklappt. Also wenn ich was anderes eingeben, als erwartet kommt nur ne Fehlermeldung:
"... failed to open dir: No such file or directory in ..."

Wenn sich am Ende ../Bilder/Fotos/Web_klein/../../../irgendwoanders ergibt, jemand also in $_GET['o'] ein ../../../irgendwoanders abgelegt hat, wird effektiv der Inhalt von ../irgendwoanders ausgelesen. Natürlich muss das einen existierenden Pfad ergeben, aber das kann man durch Probieren herausfinden. Wenn der Angreifer dann auch noch die Fehlermeldung und damit den Pfad zum Script angezeigt bekommt, kann er sogar noch das Probieren etwas abkürzen.

if ($bild != "." && $bild != ".." && $bild != "Thumbs.db")
Die Thumbs.db kannst du löschen. Die benötigt nur dein lokales Bilderanschauprogramm.
Hab das mal eingefügt für den Fall, dass ich mal versehentlich
thumbs.db mitkopiere, weil er die Thumbs in Windoof immer wieder anlegt.

Eventuell müsstest du noch ein strtolower() oder strtoupper() auf $bild anwenden, um es dann mit einem klein oder groß geschriebenen thumbs.db zu vergleichen, da Unix im Gegensatz zu Windows Unterschiede in der Schreibweise beachtet.

echo "$verabschiedung $name";