![]() |
[PHP] Directory listing sicher machen - Ordner verbieten
Ist wohl eigentlich eher ein reines PHP Problem aber trotzdem habe ich das Problem im obigen Zusammenhang.
Ich habe ein Array mit Verzeichnissen, die nicht aufgelistet werden dürfen:
Code:
Manipuliert jetzt jemand den Parameter in der URL, soll dies abgefangen werden und derjenige soll zum Wurzelverzeichnis umgeleitet werden. Mein Versuch:
$forbiddenDirs = array("Source", "cgi-bin", "data", "files");
Code:
Das funktioniert komischerweise nicht. Aber die Funktion strpos habe ich doch richtig genutzt oder?
if ($path != "")
{ foreach($forbiddenDirs as $dir) { // data /data data/ /data/ if ((strpos($path, $dir) > 0) || (strpos($path, '/'.$dir) > 0) || (strpos($path, $dir.'/') > 0) || (strpos($path, '/'.$dir.'/') > 0)) { header('Location: /'); exit; } } } |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Hi!
Auch wenn das dein Problem wahrscheinlich nicht löst, solltest du vllt. besser nicht mit >0 testen sondern eher mit ===. Siehe dazu auch die Warnung hier: ![]() Grüße, Frederic |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Wie soll ich denn mit === auf größer null prüfen?
|
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Hi!
Gar nicht, aber warum willst du auch auf größer 0 prüfen? Ich dachte, du nutzt den Vergleich mit 0 um herausfinden zu können, ob der Wert gefunden wurde? Und so wie ich die Warnung verstehe, soll man das nicht unbedingt tun. Sondern soll eher testen, ob der Wert als FALSE angesehen werden kann (für den Fall, dass nix gefunden wurde). Grüße, Frederic |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Der Ansatz ist IMO sowieso noch nicht ausgereift. Wenn beispielsweise die 4. Bedingung zutrifft ('/'.$dir.'/'), trifft auch automatisch die 2. ('/'.$dir) und/oder 3. ($dir.'/') zu, somit ist die 4. Bedingung überflüssig. Außerdem würden auch Verzeichnisse vom Listing ausgenommen, die den Namen der auszuschließenden enthalten (OK, besser als andersrum, aber trotzdem unschön). Meine PHP-Versuche sind zwar eine Zeit her, aber evtl. sollte man den übergebenen Pfad mit explode() am Slash aufsplitten und mit den Elementen vergleichen (case-insensitive), das würde zumindest einige der genannten Punkte beheben.
|
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Hi!
Wäre es nicht sowieso sinnvoller das Directory-Listing in den Ordnern mit .htaccess zu verbieten? Wenn ich das aus dem anderen Thread richtig in Erinnerung habe, setzt deine PHP-Lösung doch auch auf .htaccess auf, oder? Grüße, Frederic |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Also so:
Code:
Funktioniert es auch nicht richtig, obwohl in $path die Zeichenketten enthalten sind. Es funktioniert nur bei "/data" und "/data/". Bei "data/" und bei "data" greift die Abfrage irgendwie nicht.
if ($path != "")
{ foreach($forbiddenDirs as $dir) { // data /data data/ if ((!strpos($path, $dir) === false) || (!strpos($path, '/'.$dir) === false) || (!strpos($path, $dir.'/') === false))) { header('Location: /'); exit; } } } |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Code:
Wenn "/data" enthalten ist, muss logischerweise auch "data" enthalten sein. Außerdem solltest Du wenn schon case-insensitive prüfen. Ist allerdings ungetestet, ich hab hier kein PHP.
if ($path != "")
{ foreach($forbiddenDirs as $dir) { if (stripos($path, $dir) !== false) { header('Location: /'); exit; } } } |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Ja das stimmt und so funktioniert es auch. Nur wollte ich verhindern, dass auch so was erkannt wird:
![]() |
Re: [PHP] Directory listing sicher machen - Ordner verbieten
Hi!
Dann darfst du nicht mit strpos / stripos arbeiten, sondern musst eben wirkliche ==-Vergleiche nutzen (wohl wie schon angedeutet mit explode). Grüße, Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz