Delphi-PRAXiS

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.

himitsu 6. Dez 2009 20:05

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

<a href="./Artikel/APIZauberwuerfel.shtml">
Ist das aktuelle Verzeichnis zufällig das Artikel-Vereichnis,
bzw. wie sieht denn die URL der Seite aus?

Luckie 6. Dez 2009 20:11

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

Zitat von himitsu
Zitat:

<a href="./Artikel/APIZauberwuerfel.shtml">
Ist das aktuelle Verzeichnis zufällig das Artikel-Vereichnis,

Würde das erklären warum der Ordner vom Browser doppelt genommen wird?

Zitat:

bzw. wie sieht denn die URL der Seite aus?
http://www.michael-puff.de/Artikel/ADS.shtml

Ich habe es etwas umgebaut:
Code:
$path = $_GET['path']; // Ist jetzt path=Artikel
      
   if ((@strpos(strtolower($path), strtolower("privat")) > 0))
   {   
      header('Location: /Privat');
   }   
   
   if ($path == '')
   {
      $path = '.';
   }   
   else
   {
      $path = "./".$path;
   }
      
   $dirs = listDirs($path.'/');
   $files = listFiles($path.'/');
   
   if (!file_exists($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>';
   }
Code:
$path = str_replace("./", "", $path);
            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))
               {      
                  $tmpPath = str_replace(".", "", $path);
                  $link = $tmpPath.'/'.$dir;                  
                  echo "<tr><td class=\"noborder\"><a href=\"index.php?path=.".$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("./".$link))."</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";
               }               
            }
            
            echo '</table>';
Allerdings hat sich am Effekt nichts geändert. Es geht immer noch nicht nach dem Redirect. :(

Ruio 6. Dez 2009 20:23

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Code:
Warning: opendir(./.Developer/~MyLicenses/) [function.opendir]: failed to open dir: No such file or directory in /var/www/l3s11195/html/data/dirlisting.php on line 16

Warning: readdir(): supplied argument is not a valid Directory resource in /var/www/l3s11195/html/data/dirlisting.php on line 19

Warning: closedir(): supplied argument is not a valid Directory resource in /var/www/l3s11195/html/data/dirlisting.php on line 27

Warning: opendir(./.Developer/~MyLicenses/) [function.opendir]: failed to open dir: No such file or directory in /var/www/l3s11195/html/data/dirlisting.php on line 36

Warning: readdir(): supplied argument is not a valid Directory resource in /var/www/l3s11195/html/data/dirlisting.php on line 39

Warning: closedir(): supplied argument is not a valid Directory resource in /var/www/l3s11195/html/data/dirlisting.php on line 47

Warning: Cannot modify header information - headers already sent by (output started at /var/www/l3s11195/html/data/dirlisting.php:16) in /var/www/l3s11195/html/index.php on line 38

Inhalt von: .Developer/~MyLicenses..      


Copyright © Michael Puff
Home | Kontakt | Website durchsuchen | Sitemap
Da geht irgendwas nicht :coder2:

Luckie 6. Dez 2009 20:25

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Liste der Anhänge anzeigen (Anzahl: 2)
Verfluchter Mist. Ich werde noch mal irre. Bin jetzt wieder beim alten Code. Ich hänge einfach mal die relevanten Dateien an.

jfheins 6. Dez 2009 20:39

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Ich tippe einfach mal auf folgendes:

:arrow: Ich gebe http://www.michael-puff.de/Artikel/ in den Browser ein
:arrow: Der Webserver entdeckt daraufhin einwn DirectoryIndex der nicht im Verzeichnis liegt (sondern auf der obersten Ebene)
:arrow: Die PHP Seite guckt nun nach und gibt reltive Links zu sich selbst aus. da sie ja im Stammverzeichnis liegt, ist das also "./Artikel/xyz.shtml"
:arrow: Das kommt nun aber zurück als Antwort auf meine Anfrage nach "http://www.michael-puff.de/Artikel/"
:arrow: Der Browser findet also unter "http://www.michael-puff.de/Artikel/" einen reltiven Link zu "./Artikel/xyz.shtml"
:arrow: Der Browser bildet also die aboslute URL "http://www.michael-puff.de/Artikel/./Artikel/xyz.shtml"

So einfach :mrgreen:

Lösung: Entweder nicht noch das aktuelle Verzeichnis in den Links mitgeben oder absolute URL verwenden. Btw.: Du kannst im PHP-Script auch herausbekommen, welche URL ursprünglich aufgerufen wurde ;)

Luckie 6. Dez 2009 21:25

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Ja, genau so wird es wohl passieren. Das mit den absoluten URLs habe ich schon probiert, ist aber irgendwie in die Hose gegangen -- zumindest habe ich es nicht hinbekommen.

Zitat:

nicht noch das aktuelle Verzeichnis in den Links mitgeben
Wie könnte ich das umsetzen?

jfheins 6. Dez 2009 21:49

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Versuchs mal so:
Code:
foreach ($dirs as $dir)
            {
               echo '<tr>';
               if (!in_array($dir, $forbiddenDirs))
               {                  
                  $link = 'index.php?path=/'.$dir;
                  echo '<td class="noborder">[url="'.$link.'"]'.$dir.'[/url]</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>';
               }
               echo '</tr>';
            }
                                 
            foreach ($files as $file)
            {
               echo '<tr>';
               if (!in_array($file, $hiddenFiles))
               {
                  $size = number_format(ceil(filesize($path.'/'.$file) / 1024), 0);
                  echo '<td class="noborder">[url="/'.$file.'"]'.$file.'[/url]</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>';
               }
               echo '</tr>';
            }
In den beiden a href hab ich mal das $path entfernt - könnte klappen ;)

Luckie 6. Dez 2009 21:59

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Das hatte ich auch schon mal. Jetzt will er das Verzeichnis /Artikel/ öffnen und das macht opendir nicht mit. Das braucht wohl relative Pfade:
Zitat:

Warning: opendir(/Artikel/) [function.opendir]: failed to open dir: No such file or directory in /var/www/l3s11195/html/data/dirlisting.php on line 16
OK, das habe ich an anderer Stelle korrigiert. Aber den Pfad brauche ich, sonst, sieht der Link so aus: http://www.michael-puff.de/ADS.shtml und das passt natürlich nicht. Da fehlt der Ordner.

Ich weiß jetzt zwar nicht, was ich genau gemacht habe, aber jetzt geht es.

Mist zu voreilig. Habe mich verguckt. Geht doch nicht.

Hat noch jemand eine Idee? Andere schaffen es doch auch. :roll:

Luckie 7. Dez 2009 14:55

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Wie müsste ich denn vorgehen, wenn ich meinen bisherigen Quellcode auf absolute Pfade umstellen wollte? Wenn ich den Code sehe, dann dreht sich bei mir nämlich schon alles.

jfheins 7. Dez 2009 16:16

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
Geht doch gerade wunderbar, oder nicht?

Ansonsten wäre mir noch eingefallen, dass du beim verlinken von Verzeichnissen den vollen Pfad angibt (da dort ja wieder das Skript zum Einsatz kommt) beim verlinken von Dateien aber den relativen Pfad (weil da ja direkt drauf verwiesen wird)

Luckie 7. Dez 2009 22:01

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

Zitat von jfheins
Geht doch gerade wunderbar, oder nicht?

Nein eben nicht. Geh mal auf "Artikel", ruf eine Artikel auf, im Artikel klickst du auf "Artikelübersicht" und dann guck dir mal die Links der Artikel im Directory Listing an.

"Artikelübersicht" ist ein Link auf /Artikel. Und im Verzeichnis /Artikel befindet sich besagte .htaccess Datei.

Luckie 8. Dez 2009 11:25

Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
 
So, habe es hinbekommen. Ich habe alles auf absolute Pfade umgestellt. mein Fehler war, dass ich an der $path Variablen rumgebastelt habe, weil die Dateifunktionen nur relative Pfade akzeptieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

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