pl: HTTP Commander

Moin,

ich hab hier noch ne Demo, da hätt ich gern Eure Meinung und evntl Verbesserungsvorschläge. Möglich ist das Anlegen und Löschen von Verzeichnissen sowie Dateien. Falls sich da gravierende Sicherheitsprobleme offenbaren sollten, bitte ich um Feedback.

Danke und Gruß!

  1. ich hab hier noch ne Demo, da hätt ich gern Eure Meinung

    Einsatzzweck? Zielgruppe? Wer braucht das wofür?

  2. Malle 221 - ich konnte dem Owner die Schreibrechte entziehen :-)

    Ich nehme mal an, dass diese Seite normalerweise mit .htaccess vor pösen Purschen gesichert ist. Etwas rumpatchen in den id-Attributen des DOM, um Zugriffe auf /root zu erhalten oder Anlegen von Ordnern wie "/dings" hast Du ja abgefangen. Ich konnte nur die Anzeige durcheinander bringen, in dem ich dem Root-Node deines Baums eine schräge ID gegeben habe. Aber ich bin kein Unix-Experte, keine Ahnung welche Hacks da möglich sind. Auf jeden Fall musst Du aufpassen, dass Du mit dieser ID nichts injiziert bekommst.

    Den Massen-Upload hast Du noch disabled? Oder habe ich die Funktion im DirPanel nur nicht entdeckt? BTW finde ich die Usability der Panels etwas - gewöhnungsbedürftig. Aber das stand ja nicht zur Debatte.

    Rolf

    1. Malle 221 - ich konnte dem Owner die Schreibrechte entziehen :-)

      Das ist ok, bis dahin gehts auch ;)

              # Aussperren vermeiden
              $owner = 4 if $owner < 4;
      

      Ich nehme mal an, dass diese Seite normalerweise mit .htaccess vor pösen Purschen gesichert ist.

      Der hauptsächliche Schutz besteht darin, dass eine $basedir als Attribut für die Seite konfigurierbar und somit nach außen hin nicht sichtbar ist. D.h., dass die in allen Requests übertragene Directory erst serverseitig auf absolut zusammengepappt wird, z.B.:

          elsif($self->param('mkdir')){
              mkdir($self->eav('basedir')."/".$self->param('indir')."/".$self->param('newdir')) || 
                return do{
                  $self->header('x-param' => $self->http_query({
                       errstr => "Fehler beim Anlegen Verzeichnis: $^E"
                  }));
              };
              my $dir = $self->param('indir')."/".$self->param('newdir');
              $self->lsdir($dir);
          }
      

      Etwas rumpatchen in den id-Attributen des DOM, um Zugriffe auf /root zu erhalten oder Anlegen von Ordnern wie "/dings" hast Du ja abgefangen. Ich konnte nur die Anzeige durcheinander bringen, in dem ich dem Root-Node deines Baums eine schräge ID gegeben habe. Aber ich bin kein Unix-Experte, keine Ahnung welche Hacks da möglich sind. Auf jeden Fall musst Du aufpassen, dass Du mit dieser ID nichts injiziert bekommst.

      Verstehe ich nicht ganz... die root-id im DOM lautet 'tree', ansonsten so wie die SubDir und jedes <li>-Element kriegt .DIR sowie .FILE als internes Attribut verpasst, das ist im DOM gar nicht sichtbar aber im EventListener notwendig.

      Den Massen-Upload hast Du noch disabled?

      Nene, das geht schon: DirPanel sichtbar machen und dann auf das <label>Dateien zum hochladen:</label> klicken. Danach füllt sich die darunterliegende Tabelle und hier kannst Du auch ggf. den Dateinamen ändern oder fürs Upload das Häkchen rausnehmen.

      Oder habe ich die Funktion im DirPanel nur nicht entdeckt? BTW finde ich die Usability der Panels etwas - gewöhnungsbedürftig. Aber das stand ja nicht zur Debatte.

      Doch ;)

      Probiers mal aus, das Upload ist echt der Hit, jede Datei hat eine eigene Progressbar. Deine Dateien kannst Du ja auch wieder löschen.... am besten ein eigenes Verzeichnis anlegen.

      Danke für Dein Feedback!

      1. Doch ;)

        Probiers mal aus, das Upload ist echt der Hit, jede Datei hat eine eigene Progressbar. Deine Dateien kannst Du ja auch wieder löschen.... am besten ein eigenes Verzeichnis anlegen.

        Danke für Dein Feedback!

        Bildbeschreibung

        1. So, jetzt habe ich den Upload mal ausprobiert, und zwar dieses Bild:

          Ergebnis steht hier

          Ja ei verbibscht, wie bin ich denn da wohl hingekommen?

          Meine Empfehlung: Nimm deinen Commander offline, bevor irgendjemand was anderes macht als Päckchen grün anzumalen.

          Rolf

          1. Ergebnis steht hier

            hmm, ...

            Ja ei verbibscht, wie bin ich denn da wohl hingekommen?

            Wahrscheinlich über ../../usw.

            Meine Empfehlung: Nimm deinen Commander offline, bevor irgendjemand was anderes macht als Päckchen grün anzumalen.

            Done.

            Danke für Deine Bemühung und den Hinweis auf die Lücke!!

            Viele Grüße, pl

          2. Ja ei verbibscht, wie bin ich denn da wohl hingekommen?

            Im Logfile ist alles nachvollziehbar ;)

            Aber beim Upload statt Verzeichnisname (in Entwicklerkonsole) zu ändern, hättest Du auch nur den Dateinamen ändern müssen, übers DirPanel in der Tabelle, da ist nämlich: <td contenteditable="true"> .

            Meine Empfehlung: Nimm deinen Commander offline, bevor irgendjemand was anderes macht als Päckchen grün anzumalen.

            Für'n Dienstgebrauch im Adminbereich ist das Teil ganz nett.

            Schönes Wochenende.

            PS/Fazit: Beim regulären Upload darf es dem Anwender nicht möglich sein, den Dateinamen selbst zu vergeben, also da Verzeichnisnamen oder ../../vor/dateiname einzufädeln.

            elsif($self->param('upload')){
                my $upfile = $self->eav('basedir')."/".$self->param('dirname')."/".$self->param('filename');
                my $fh = IO::File->new;
                $fh->open($upfile, O_CREAT|O_BINARY|O_TRUNC|O_RDWR) || 
                  return $self->header('x-param' => $self->http_query({errstr => [$^E]}));    
                $fh->print($self->{CGI}->rawdata);
                $fh->close;
            }