Sicherheitslücke in Galleriescript schließen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by icecream; 18-03-2007, 20: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.
    Last edited by penizillin; 18-03-2007, 18:06.

    Comment


    • #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

      Comment


      • #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

        Comment


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

          Comment


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

            Macks
            icedcream.de Webdesign Regensburg

            Comment


            • #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 )."/";

              Comment

              Working...
              X