Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Directory listing sicher machen - Ordner verbieten (https://www.delphipraxis.net/144460-%5Bphp%5D-directory-listing-sicher-machen-ordner-verbieten.html)

Luckie 8. Dez 2009 11:43


[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:
$forbiddenDirs = array("Source", "cgi-bin", "data", "files");
Manipuliert jetzt jemand den Parameter in der URL, soll dies abgefangen werden und derjenige soll zum Wurzelverzeichnis umgeleitet werden. Mein Versuch:
Code:
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;
         }
      }
   }
Das funktioniert komischerweise nicht. Aber die Funktion strpos habe ich doch richtig genutzt oder?

fkerber 8. Dez 2009 12:24

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: http://php.net/manual/de/function.strpos.php


Grüße, Frederic

Luckie 8. Dez 2009 12:47

Re: [PHP] Directory listing sicher machen - Ordner verbieten
 
Wie soll ich denn mit === auf größer null prüfen?

fkerber 8. Dez 2009 12:50

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

DeddyH 8. Dez 2009 12:58

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.

fkerber 8. Dez 2009 13:02

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

Luckie 8. Dez 2009 13:19

Re: [PHP] Directory listing sicher machen - Ordner verbieten
 
Also so:
Code:
   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;
         }
      }
   }
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.

DeddyH 8. Dez 2009 13:33

Re: [PHP] Directory listing sicher machen - Ordner verbieten
 
Code:
if ($path != "")
   {         
      foreach($forbiddenDirs as $dir)
      {                 
         if (stripos($path, $dir) !== false)        
         {
            header('Location: /');
            exit;
         }
      }
   }
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.

Luckie 8. Dez 2009 13:45

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: http://www.michael-puff.de/index.php...ataverzeichnis. Da greift die Bedingung jetzt nämlich auch.

fkerber 8. Dez 2009 13:47

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 16:09 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz