![]() |
[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:
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:
DirectoryIndex /index.php?path=./Artikel
Code:
Die Links stimmen also. Fahre ich aber im Browser über den Link steht in der Statusleiste:
<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>
![]() 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";
|
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 =) |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Zitat:
|
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
![]() Also unbedingt prüfen, ob die Verzeichnisse auch wirklich gelistet werden dürfen ( ![]() Du übergibst ohne zu prüfen den Pfad 1:1 an eine Funktion weiter. Das ist immer sehr kritisch ![]() 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. |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Code:
Das ist alles, was ich mit der Variablen mache.
$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>'; } 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"; } } |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Zitat:
Code:
Oder so irgendwie.
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 |
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.
|
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:
somit den falschen Pfad erstellst? Was steht denn in "$dir"?
$link = 'index.php?path='.$path.'/'.$dir;
Grüße, Matze |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Werde ich heute Abend mal gucken. Muss leider erstmal weg.
|
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.
|
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Zitat:
bzw. wie sieht denn die URL der Seite aus? |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Zitat:
Zitat:
![]() 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:
Allerdings hat sich am Effekt nichts geändert. Es geht immer noch nicht nach dem Redirect. :(
$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>'; |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Code:
Da geht irgendwas nicht :coder2:
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 |
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.
|
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Ich tippe einfach mal auf folgendes:
:arrow: Ich gebe ![]() :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 ;) |
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:
|
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Versuchs mal so:
Code:
In den beiden a href hab ich mal das $path entfernt - könnte klappen ;)
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>'; } |
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:
![]() 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: |
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.
|
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) |
Re: [PHP] Verzeichnisse verdoppeln sich in Links nach Umleit
Zitat:
"Artikelübersicht" ist ein Link auf /Artikel. Und im Verzeichnis /Artikel befindet sich besagte .htaccess Datei. |
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 22:54 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 by Thomas Breitkreuz