Sicherheitslücke in Galleriescript schließen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sicherheitslücke in Galleriescript schließen

    Hallo,
    ich arbeite gerade an einem Galeriescript, das die Ordner eines Verzeichnisses ausliest und anschließend die Bilder.
    Also kann man sich praktisch innerhalb eines Verzeichnisses durch mehrere "Ordner-Ebenen" bewegen und von jedem Ordner die Bilder betrachten.

    Das funktioniert alles wunderbar. Ich übertrage einfach den Ordner per URL ($_GET)...

    Nun möchte ich, dass man wieder auf die Ebene drüber gelangen kann. Ein Beispiel:

    Aktueller Ordner: images/Gallery
    Klick auf 'ordner2' => Aktueller Ordner: 'images/Gallery/ordner2'
    Klick auf 'zurück' => Aktueller Ordner: 'images/Gallery'

    Wenn ich an die URL einfach '/..' hinten ranhänge, dann habe ich das Problem, dass man durch einen Klick auf "Zurück" in den Ordner 'images' und von da wieder eins höher, etc. gelangt.

    Nun 2 Fragen:
    1. Gibt es eine Funktion, die mir den übergeordneten aus einem String rausliest? Also String wäre 'images/Gallery/ordner2' und er gibt mir 'images/Gallery' zurück?

    2. Wie kann ich ausschließen, dass man per URL-Manipulation ('/..') durch sämtliche Verzeichnisse browsen kann?

    Hier der Code:
    PHP-Code:
    <?php
    /*#####
    //COPYRIGHT 2007 BY [email]max0schmitt@aol.com[/email]
    #####*/
    $folder $_GET['dir'];
    $dir './images/gallery' $folder;
    $handle opendir($dir);
    echo 
    '$handle = ' $handle '<br />';
    echo 
    '$dir = ' $dir '<br /><br />';
    echo 
    '<b>FOLDERS:</b><br />';
    while (
    false !== ($file readdir($handle))) {
        if (
    is_dir($dir '/' $file) && $file != '.' && $file != '..') {
            echo 
    '<img src="images/folder.gif" alt="' $file '" />';
            echo 
    ' <a href="index.php?nav=media&action=gallery&dir=' $folder '/' $file '">';
            echo 
    $file;
            echo 
    '</a><br />';
        }
    }
    closedir($handle);
    $handle opendir($dir);
    while (
    false !== ($file readdir($handle))) {
          if (
    $file != '.' && $file != '..' && (eregi(".jpg$"$file) || eregi(".jpeg$"$file))) {
            echo 
    '<a href="images/gallery/' $folder '/' $file '"  target="_blank">';
            echo 
    '<img src="tnail.php?img=' $folder '/' $file '" alt="' $file '" /></a> ';;
          }
    }
    closedir($handle);
    echo 
    '<a href="index.php?nav=media&action=gallery&dir=' $folder '/..">BACK</a>';
    ?>
    Danke schonmal im Vorraus!

    Macks
    Zuletzt geändert von icecream; 18.03.2007, 21:02.
    icedcream.de Webdesign Regensburg

  • #2
    alles mit hilfe von string-funktionen, etwas fertiges ist mir nicht bekannt.

    und das wort wird immer noch mit einem "L" geschrieben.
    Zuletzt geändert von penizillin; 18.03.2007, 19:06.

    Kommentar


    • #3
      Mh... Okay, dann werd' ich mich mal ranmachen...
      Original geschrieben von penizillin
      und das wort wird immer noch mit einem "L" geschrieben.
      Galerie ja, aber nicht das englische Wort Gallery
      EDIT: Ach so, das war auf den Titel bezogen^^

      Macks
      icedcream.de Webdesign Regensburg

      Kommentar


      • #4
        Okay, das mit der obersten Eben habe ich so gelöst, wen es interessiert:

        PHP-Code:
        if (!empty($folder)) {
            
        $holder explode('/'$folder);
            unset(
        $holder[0]);
            
        $numholder count($holder);
            unset(
        $holder[$numholder]);
            
        $i 0;
            
        $above '';
            while (
        $i <= $numholder) {
                
        $above .= $holder[$i] . '/';
                
        $i++;
            }
            
        $ablength strlen($above);
            
        $above substr($above0$ablength 2);
            echo 
        '<a href="index.php?nav=media&action=gallery&dir=' $above '">BACK</a>';

        Macks
        icedcream.de Webdesign Regensburg

        Kommentar


        • #5
          explode()
          array_pop()
          implode()
          tun das gleiche.

          Kommentar


          • #6
            Original geschrieben von penizillin
            explode()
            array_pop()
            implode()
            tun das gleiche.
            Warum... geht ja auch umständlich

            Macks
            icedcream.de Webdesign Regensburg

            Kommentar


            • #7
              Und was sagst du zu String-Funktionen?
              PHP-Code:
              if( substr$dirname, -)!='/' ) {
                  
              $dirname.='/';
              }
              if( ( 
              $pos strrpossubstr$dirname0, -), '/' ) )===false ) {
                  
              $upperdir '/';
              }
              else {
                  
              $upperdir substr$dirname0$pos )."/";

              Kommentar

              Lädt...
              X