Hallo Robert B.,
Weiß das auch der Webserver, wenn der Nutzer den generierten Link <a href="..">..</a> anklickt?
Den generiert man natürlich nicht mit, das Code-Snippet, das mir die KI runtergesaut hat, fragte das ab
Wie werden Dateien mit (unter Linux/Unix erlaubten!) Sonderzeichen ∈ [<">#& '] verarbeitet?
Das sollte bei korrekt durchgeführtem Kontextwechsel unproblematisch sein.
Ich habe ChatGPT mit folgendem Prompt befeuert:
Ich möchte auf meinem Apache Webserver für ein bestimmtes Verzeichnis den Inhalt auflisten lassen. Die Apache Darstellung mit DirectoryIndex gefällt mir aber nicht, ich möchte ein index.php haben, dass die Anzeige nach meinen Vorstellungen erzeugt. Gib mir eine Grundlage für ein solches Programm
Der Bot leitet seine Antwort ein mit:
Unten findest du eine einfache, saubere Grundlage für eine index.php, die den Inhalt eines Verzeichnisses selbst auflistet und dabei etwas ansprechender formatiert als die standardmäßige Apache‐Indexanzeige.
Das Skript:
- liest das aktuelle Verzeichnis
- filtert . und ..
- zeigt Dateien und Ordner getrennt an
- zeigt Größe und Änderungsdatum
- ist sicher (keine Directory Traversal Lücken)
- benötigt kein DirectoryIndex, außer dass Apache auf index.php zeigt
Du kannst es beliebig erweitern.
Dann kommt etwas mehr als ein Bildschirm voll PHP Code, der das Verzeichnis mit scandir ausliest, mit array_diff . und .. entfernt, seinen Fund nach Verzeichnissen und Dateien aufgliedert, erst die Verzeichnisse und dann die Dateien als <table> auflistet und alle Ausgaben sauber mit htmlspecialchars behandelt. table ist mMn okay, weil er Name, Datum und (bei Dateien) Größe listet.
Alles klickbar, aber nicht über Parameter, sondern einfach so, dass man die geklickte Ressource abruft. Setzt natürlich voraus, dass es in allen Verzeichnissen, die so erreicht werden können, eine index.php gibt.
Zum Schluss sagt er mir noch, dass die Apache-Konfiguration um
Options -Indexes
DirectoryIndex index.php
ergänzt werden muss. Ob in der .htaccess oder in der httpd.conf - das verrät er nicht.
Also eigentlich nicht schlecht. Kritisieren könnte man
- dass er mit <?php echo ... ?> statt mit <?= ?> arbeitet
- dass er den htmlspecialchars-Aufruf in eine Funktion h() kapselt
- dass er "Arial, sans-serif" als Font ins Stylesheet stellt und die Margins und Paddings, die er setzt, in px formuliert
- dass er die aktive Zeile hervorheben will und dafür tr:hover nutzt. Was ist mit Tastaturbedienern? Hey!
Auf Nachfragen zur Tastatur meint er, man sollte eine Style-Regel mit tr:has(a:focus-visible) ergänzen. Ich WOLLTE schon meckern und fragen, warum er nicht :focus-within nimmt, aber er hat tatsächlich recht, denn bei :focus-within bleibt der Fokus bei Mausbedienung sichtbar, wenn ich in einer Zeile den Fokus habe und die Maus wegfahre.
Und dann drängt er sich weiter auf:
Möchtest du noch etwas?
Ich kann dir z. B. hinzufügen:
- Sortierung (Name, Datum, Größe)
- Icons für Dateitypen
- Responsive Layout
- Download‐Links statt Direktaufrufen
- Bootstrap/Tailwind-Version
- Breadcrumb-Navigation
Sag einfach Bescheid!
Uff. Das Ding macht uns doch noch arbeitslos 😉
Rolf
sumpsi - posui - obstruxi