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] Verzeichnisse verdoppeln sich in Links nach Umleitung (https://www.delphipraxis.net/144375-%5Bphp%5D-verzeichnisse-verdoppeln-sich-links-nach-umleitung.html)

Luckie 6. Dez 2009 14:04


[PHP] Verzeichnisse verdoppeln sich in Links nach Umleitung
 
Ich habe folgendes Problem. Ich habe in manchen Verzeichnissen eine .htaccess Datei liegen mit folgendem Inhalt:
Code:
DirectoryIndex /index.php?path=./Artikel
Damit wird mein Skript für die Directory listings für das entsprechende Verzeichnis aufgerufen. Das Directory listing wird auch erstellt. Im Quelltext sieht das dann so aus:
Code:
<tr><td class="noborder">[url="./Artikel/APIZauberwuerfel.shtml"]APIZauberwuerfel.shtml[/url]</td><td class="noborder" align="right">4k</td><td class="noborder" align="center" width=150px>2005-11-13 02:19</td><td class="noborder">Die Windows-API ist wie ein Zauberwürfel</td></tr>
Die Links stimmen also. Fahre ich aber im Browser über den Link steht in der Statusleiste: http://www.michael-puff.de/Artikel/A...rwuerfel.shtml. Also der Ordner zwei mal. Wo kommt der her, wo er doch gar nicht im Quellcode steht.

Derr Code zum Erstellen:
Code:
echo "<tr><td class=\"noborder\"><a href=\"".$path."/".$file."\">".$file."</a></td><td class=\"noborder\" align=\"right\">".$size."k</td><td class=\"noborder\" align=\"center\" width=150px>".date("Y-m-d H:i",filemtime($path."/".$file))."</td><td class=\"noborder\">".getTitleFromHTML($path."/".$file)."</td></tr>\n";

Micha88 6. Dez 2009 14:13

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Es steht /Artikel/ wahrscheinlich norrens in der Variablen "Path" drin.

Zeig mal die Stelle, wo Path etwas zugewiesen wird =)

Luckie 6. Dez 2009 14:28

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Zitat:

Zitat von MichaelLinden
Es steht /Artikel/ wahrscheinlich norrens in der Variablen "Path" drin.

Kann icht sein, denn dann würde auch der Link im HTML falsch zusammengebaut. Außerdem wird die Variable auch richtig ausgegeben. Das ist es ja, was mich so verwirrt.

Matze 6. Dez 2009 14:29

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Was mir auffällt, dass du vermutlich Sicherheitslücken im Skript hast. Eine Manipulation der URL darf keine PHP-Fehler zur Folge haben (wie hier).
Also unbedingt prüfen, ob die Verzeichnisse auch wirklich gelistet werden dürfen (sollte das gelistet werden?). Sonst kommt u.U. das böse Erwachen, wenn Konfigurationsdateien aufgelistet und geöffnet werden können.
Du übergibst ohne zu prüfen den Pfad 1:1 an eine Funktion weiter. Das ist immer sehr kritisch s. hier).

Merke: Überprüfe IMMER alle Parameter auf ihre Gültigkeit und gehe NIE davon aus, dass der Besucher nur auf deinen Links herumklickt. Das gilt natürlich auch für include() & Co. Ich persönlich nutze beispielsweise nur absolute Pfade. Dann kann ausgeschlossen werden, dass Dateien von Fremden Servern eingebunden werden.

Luckie 6. Dez 2009 14:32

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Code:
$path = $_GET['path']; // z.B. path=./Artikel
   
   if ($path == './Privat')
   {
      header('Location: /Privat');
   }   
   
   if ($path == '')
   {
      $path = '.';
   }   

   $dirs = listDirs($path.'/');
   $files = listFiles($path.'/');
   
   if (!file_exists(str_replace("./", "", $path)))
   {
      header('Location: '.$path);
   }   
   
   if ($path != ".")
   {
      foreach($defaultPages as $file)
      {
         if (file_exists($path."/".$file))
         {
            header('Location: '.$path."/".$file);
            exit;
         }
      }
   }   
   
   if ($path != '.')
   {
      echo '

[b]Inhalt von: '.str_replace("./", "", $path).'[/b]</p>';
   }
Das ist alles, was ich mit der Variablen mache.

Wie bekomme ich den Fehler weg und wie mache ich das Skript sicher?

Und die Ausgabe:
Code:
echo '<table class="noborder">';
            if ($path != '.')
            {
               echo "<tr><td class=\"noborder\"><a href=\"/index.php?path=".$parentDir."\">..</a></td><td class=\"noborder\"></td><td class=\"noborder\"></td></tr>\n";
            }
            foreach ($dirs as $dir)
            {               
               if (!in_array($dir, $forbiddenDirs))
               {                  
                  $link = 'index.php?path='.$path.'/'.$dir;                  
                  echo "<tr><td class=\"noborder\"><a href=\"".$link."\">".$dir."</a></td><td class=\"noborder\" align=\"center\">[DIR]</td><td class=\"noborder\" align=\"center\" width=150px>".date("Y-m-d H:i",filemtime($path."/".$dir))."</td><td class=\"noborder\"</td></tr>\n";
               }               
            }
                                 
            foreach ($files as $file)
            {               
               if (!in_array($file, $hiddenFiles))
               {
                  $size = number_format(ceil(filesize($path.'/'.$file) / 1024), 0);
                  echo "<tr><td class=\"noborder\"><a href=\"".$path."/".$file."\">".$file."</a></td><td class=\"noborder\" align=\"right\">".$size."k</td><td class=\"noborder\" align=\"center\" width=150px>".date("Y-m-d H:i",filemtime($path."/".$file))."</td><td class=\"noborder\">".getTitleFromHTML($path."/".$file)."</td></tr>\n";
               }               
            }

Matze 6. Dez 2009 14:35

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Zitat:

Zitat von Luckie
Wie bekomme ich den Fehler weg und wie mache ich das Skript sicher?

Indem du die Parameter genau prüfst, beispielsweise so:

Code:
if (((file_exists($abs_path . $param_path)) // prüfen, ob die Dateien auf deinem Server liegen
    && (in_array($param_path, $arr_listing_allowed))) // prüfen, ob der Pfad im Array für zugelassene Verzeichnisse liegt

// ...

include($abs_path . $param_path); // immer absolute Pfade nutzen
Oder so irgendwie.

Luckie 6. Dez 2009 14:40

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
OK, aber das behebt natürlich den Fehler mit den doppelten Ordnern nicht. Das wäre erstmal mein primäres Problem.

Matze 6. Dez 2009 14:45

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Nein, dein primäres Problem ist die Sicherheit deiner Daten.

Zu deinem sekundären Problem:
Kann es sein, dass "$dir" bereits einen Teil des Pfades enthält und du hier

Code:
$link = 'index.php?path='.$path.'/'.$dir;
somit den falschen Pfad erstellst? Was steht denn in "$dir"?

Grüße, Matze

Luckie 6. Dez 2009 14:50

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Werde ich heute Abend mal gucken. Muss leider erstmal weg.

Luckie 6. Dez 2009 19:31

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
In einem Verzeichnis ohne Unterordner ist sie leer. Aber sie hat ja auch nichts mit dem Link zur Datei zu tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 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