Dude566 hat folgendes geschrieben : |
Ein Problem wäre da aber noch, es wird leider auch ".." und "." als Ordner oder Datei in der Übersicht angezeigt.
Ich möchte aber nicht das jemand sich so in das Verzeichnis hangeln kann in dem die Hauptseite und weitere Dateien liegen. |
Das sind zwei verschiedene Probleme: ein optisches und ein akutes Sicherheitsrisiko. Das erste ist recht leicht zu lösen, du hast es ja fast geschafft. Um aber tatsächlich zu verhindern, dass ein Ordner aufgerufen werden kann, der oberhalb des Script-Ordner liegt, musst du die
Eingaben prüfen, nicht die
Ausgabe filtern. Beispielsweise könntest du Strings mit dem Inhalt '..' verbieten.
Dude566 hat folgendes geschrieben : |
Also wollte ich dann überprüfen ob $file = ".." oder "." ist, jetzt wird aber nichts mehr angezeigt, vermutlich da in den Dateinamen ja auch Punkte zur Dateiendung gehören.
Quelltext 1: 2: 3:
| if (!$file = '..') { /* der ganze Kram zur Anzeige */ } | |
Zwei kleine Fehler. Erstens musst du das doppelte Gleichheitszeichen (==) für Gleichheitstests verwenden (das einfache (=) bewirkt eine Zuweisung).
Quelltext
Zweitens die Reihenfolge der Operatoren beachten. Du hast deinen Code schön formatiert, denn es wird sichtbar, wie PHP den Ausdruck auswertet: Erst wird der boolsche Operator
Nicht auf
$file angewandt, was bewirkt, dass
$file in einen Boolean verwandelt wird. Dabei kommt dann
true heraus. Der
nicht-Operator macht daraus ein
false. Jetzt vergleichst du
false mit
'..' - und was kommt raus - natürlich
false, denn die Gleichheit ist unwahr.
Stattdessen musst du entweder zuerst vergleichen, dann negieren (
!($file == '..')) oder einfach den
ungleich-Operator (!= verwenden).