Download via header attachment...

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

  • Download via header attachment...

    Hi Leute!

    Hab ein problem mit nem downloadscript! Natürlich hab ich auch schon rumgesucht und bin dabei hierrauf gestoßen. Jedoch konnte mir dieser Threat leider auch nicht weiter helfen!

    Mein aktuelles Script sieht so aus:
    Link = download.php?file=../pics/galerie/Computer/mouselack/IMG_0358.JPG
    PHP-Code:
    <?php
    $datei 
    $_GET[file];
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$datei");
    header("Content-Transfer-Encoding: binary");
    readfile($datei);
    ?>
    Problembeschreibung:
    Der Download-Dialog erscheint wie geplant, ABER:
    Alle Slashes werden durch Minus-Zeichen ersetzt! Bsp:
    ..-pics-galerie-Computer-mouselack-IMG_0358.JPG

    urlencode &Co. waren irgendwie nutzlos!

    Danke für eure Hilfe!
    WHILE (!$asleep) { $sheep++; }

  • #2
    das ist normal..

    aber davon mal abgesehen.
    Dir ist klar das du damit eine extrem große sicherheitslücke öffnest ja??

    download.php?file=../../config.php oder so
    und zack kann man sishc schön die daten runterladen die man bruahct..

    da du es also anders lösen solltest braucht man auf deine anderes problem nicht weiter eingehen..

    Kommentar


    • #3
      Original geschrieben von Trashar
      ...da du es also anders lösen solltest braucht man auf deine anderes problem nicht weiter eingehen..
      Hast du eventuell nen Lösungsansatz oder wenigstens ein "Stichwort" für mich parat!?
      WHILE (!$asleep) { $sheep++; }

      Kommentar


      • #4
        header("Content-Disposition: attachment; filename=$datei");


        und in $datei steht sowas wie ../../ordner/foobar/blub.jpg

        Und der wandelt die / automatisch in - um
        Da kannst dich quer stellen das wird sich nich ändern

        so und nun änder dein download script..

        Kommentar


        • #5
          Sehr hilfreich und vor allem freundlich Trash!

          Hat jemand nen besseren Lösungsansatz als mein problem zu zitieren?

          Danke nochmals!
          WHILE (!$asleep) { $sheep++; }

          Kommentar


          • #6
            Da kannst dich quer stellen das wird sich nich ändern
            DA STEHT DAS ES NICHT ÄNDERBAR IST!

            Was du machen könntest, $datei aufzusplitten..

            Suche nach dem letzten / und den rest darein schreiben.. dann hast du nur den Dateinamen..

            Kommentar


            • #7
              Man Trash!?

              Das es nicht änderbar ist ist kein Lösungsansatz!

              Ich versuche nen download-link zu bauen und bin aufm Holzweg; Das hab ich schon eingesehn als ich mich entschieden hab das Problem hier zu posten!
              Um ehrlich zu sein ich denke leute die ihre eigenen Foren coden haben sicher nen besseren Tipp als "...da kannst du dich quer legen...", oder?

              Back to Topic: Das mit dem aufsplitten geht leider nicht, da der Pfad sich andauernd ändert! =(

              Würde ne Verschlüsselung was bringen? MD5 oder so?
              Zuletzt geändert von nichtsooft; 21.09.2006, 08:10.
              WHILE (!$asleep) { $sheep++; }

              Kommentar


              • #8
                na und dann splitte pfad unabhängig auf.. suche nach dem letzten / (strrpos glaub ich war das) und gib den rest aus..
                Da ist es scheiß egal wie der pfad ist..

                Du willst einen lösungsansatz? Tja danns chau in den php code.. oder vielleicht gleich in den apachen code.. irgendwo muss ja so ein header teil drin sein, der die / in - ändert
                da würd ich ansetzen..
                Ist das nun ein Lösungsansatz?

                Md5 ist keine verschlüsselung, es ist eine Hash Funktion

                Kommentar


                • #9
                  Original geschrieben von nichtsooft
                  Ich versuche nen download-link zu bauen und bin aufm Holzweg; Das hab ich schon eingesehn als ich mich entschieden hab das Problem hier zu posten!
                  Und du willst behaupten, dass alle anderen Threads hier zum Thema auch nur auf Holzwege führen?
                  Das mit dem aufsplitten geht leider nicht, da der Pfad sich andauernd ändert! =(
                  Aua.

                  Falls es dir noch nicht bekannt sein sollte: Man kann in PHP nicht nur mit Festwerten arbeiten, sondern auch mit so tollen Dingern, die sich "Variablen" nennen. Und deren Inhalt kann man auch bearbeiten, es gibt beispielsweise Stringfunktionen, etc.


                  Sorry für den Sarkasmus, aber du stellst dich extrem ... an.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Ohhh? Es gibt tatsächlich Variablen in PHP?

                    Bin mir sicher die kann ich auch noch von Datei zu Datei zaubern, was!?

                    Ne; Mal wieder ernst...:
                    Ich code ne Galery in einfachster Form! Ein Verzeichnis wird gelesen und die darin enthaltenen Bilder als thumbs angezeigt. Diese Bilder sind nicht in ner DB erfasst, also kann ich nicht mit IDs (Bsp.: download.php?imgid=225568) arbeiten.
                    Ich muss irgendwie den ganzen Dateipfad, bzw. die Variable die den Dateipfad beschreibt an die "download.php" senden und dafür gibt's meines Erachtens nach nur 3 Wege. Cookie, POST und GET (wovon ich aber situationsbedingt nur letzeres verwenden kann).

                    Soweit richtig?
                    WHILE (!$asleep) { $sheep++; }

                    Kommentar


                    • #11
                      Original geschrieben von nichtsooft
                      Ich muss irgendwie den ganzen Dateipfad, bzw. die Variable die den Dateipfad beschreibt an die "download.php" senden und dafür gibt's meines Erachtens nach nur 3 Wege. Cookie, POST und GET (wovon ich aber situationsbedingt nur letzeres verwenden kann).
                      Ja.
                      Und?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        ok; weiter...

                        wenn ich eine, den Dateipfad beschreibende Variable per URL mitschicke, sieht das wiederum so aus:
                        download.php?datei=pics/galerie/bla/bla/blub.jpg

                        Das ist allerdings wie schon Trash gemeint hat extrem unsicher.
                        Jetzt könnte ich die Sache wie schon erwähnt aufsplitten, so dass die URL dann so aussieht:
                        download.php?sub1=bla&sub2=bla&file=blub.jpg*

                        Wobei ich aber hier nach wie vor ein Sicherheitsleck offen lasse.


                        *= (pics/galerie) bleibt konstant.
                        WHILE (!$asleep) { $sheep++; }

                        Kommentar


                        • #13
                          Original geschrieben von nichtsooft
                          wenn ich eine, den Dateipfad beschreibende Variable per URL mitschicke, sieht das wiederum so aus:
                          download.php?datei=pics/galerie/bla/bla/blub.jpg
                          Sowas machst du doch hoffentlich nicht - ohne die Daten URL-gerecht zu kodieren?
                          Wobei ich aber hier nach wie vor ein Sicherheitsleck offen lasse.
                          Überpüfe, ob der angegebene Pfad "erlaubt" ist.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Na klar. die zweite Variante macht das ganze kein Stück sicherer, nur ein wenig unscheinbarer.

                            Aber du kennst das Problem. Nun überlege was getan werden muss, damit die Manipulation nicht stattfinden kann. Dabei geht es in erster Linie noch nichteinmal um konkreten PHP-Code, sondern erstmal nur um den Grundgedanken. Wenn du den verstanden hast, kannst du auch entsprechend vorgehen.

                            Kommentar


                            • #15
                              Hi,

                              1. zur Sicherheitslücke:

                              Und warum überprüfst Du nicht einfach vorher mal die GET-Variable, ob
                              der übergebene Pfad auch zulässig ist?

                              2. Dateiname:

                              Es kann doch nicht so schwer sein, aus einem Pfad den Dateinamen zu
                              lesen. In der Header-Zeile brauchst Du doch nur den, bzw. gehört da
                              kein Pfad rein. Was Du dort angibst, ist wie ein "Speichern unter..." -
                              Namensvorschlag für die Datei.

                              Kommentar

                              Lädt...
                              X