Matze: Dateiupload - move_uploaded_file() o. on-the-fly erstellen?

Hallo!

Ich habe ein Upload-Script welches ich, je nach Bedarf, für verschiedene Dateitypen einrichten kann.
Z.B. nur Textdokumente oder nur Bilder, nur Videos etc. oder alle erlaubten Dateitypen.

Bei den Bildern ist mir die Idee gekommen, die Dateien nicht als original auf dem Server zu speichern, sondern on-the-fly eine Kopie zu erstellen.
Das bietet mir die Vorteile, dass ich unerfahrenen Benutzern nicht zumuten muss ihre Bilder selbst in eine gewünschte Größe zu bringen und das der Server nicht allzuschnell mit übergroßen Fotos zugemüllt wird.

Ist diese Idee sinnvoll oder sollte ich die Bilder als Original auf dem Server speichern und nur bei Bedarf (Thumbnails o. speziell gewünschte Ausgabegröße) on-the-fly erstellen?

Irgendwie hab ich auch das Gefühl eines gesteigerten Sicherheitskonzepts.
Beim "kopieren" mit einer der imagecreatefrom...()-Funktionen sollte evtl. eingeschleuster Code aus dem Original ja nicht übernommen werden oder liege ich da völlig falsch?

Und wie verhält es sich z.B. mit PDF, DOC und Textdateien?
Könnte man die nach dem Upload auch on-the-fly erstellen um die Sicherheit zu erhöhen?
Hier fällt natürlich der Aspekt weg, dass man damit verhindern könnte, dass der Server zugemüllt wird.

Danke für eure Meinung!

Grüße, Matze

  1. Hallo Matze,

    man kann die Bilder durchaus direkt erstellen, ob das eine gute Idee ist, haengt davon ab, wie oft wieviele Bilder welcher Groesse hochgeladen werden. Ich kann dir da auch keine echte Regel anhand geben, es ist aber so, dass bei einem normalen Feldwaldwiesenhosting das 'gleichzeitige' Generieren von 5 oder 6 Bildern mit je 50-70 kb kein Problem darstellen sollte. Wie gesagt, das haengt sehr von der Umgebung ab, dass musst du testen.

    Wenn du bei Bildern auf Nummer sicher gehen willst, kannst du erstmal mit getimagesize() herausfinden, ob es sich wirklich um Bilder handelt. Der index 'mime' aus dem Ergebnis der Funktion kann praktischerweise dazu verwendet werden, imagecreatefrom...() passend zu ergaenzen. Entgegen allen guten Gewohnheiten kannst du vor getimagesize() auch ruhig ein @ schreiben und so den Ablauf besser kontrollieren. Ich meine, man koennte auch direkt auf den Pfad in $_FILES['tmpname'] zugreifen, also ohne eine temporaere Kopie zu speichern, bin aber nicht 100pro sicher.

    Ich verstehe aber nicht, wie du das mit den PDF usw. meinst, die werden hochgeladen, getestet, gespeichert und fertig oder was willst du sonst noch mit machen?

    Gruss

    Dieter

    1. Hallo Dieter,

      Wenn du bei Bildern auf Nummer sicher gehen willst, kannst du erstmal mit getimagesize() herausfinden, ob es sich wirklich um Bilder handelt.

      Laut eines Artikels hier auf SELFHTML (ich find ihn natürlich nicht mehr) ist es durchaus möglich Code an getimagesize() vorbei zu schleusen.
      Es war zwar immernoch nötig, dass die Datei anschließend als PHP geparst wird, aber trotzdem nicht schön das ganze.

      Entgegen allen guten Gewohnheiten kannst du vor getimagesize() auch ruhig ein @ schreiben und so den Ablauf besser kontrollieren. Ich meine, man koennte auch direkt auf den Pfad in $_FILES['tmpname'] zugreifen, also ohne eine temporaere Kopie zu speichern, bin aber nicht 100pro sicher.

      Kann man. Allerdings schreib ich das @ vor imagecreatefrom...() um dessen Fehler abzufangen. Mit getimagesize() hatte ich nie Probleme.

      Ich verstehe aber nicht, wie du das mit den PDF usw. meinst, die werden hochgeladen, getestet, gespeichert und fertig oder was willst du sonst noch mit machen?

      Es ist ja z.B. auch möglich PDF-Datein mit Schadcode zu versehen. Durch eine Kopie könnte man dann eventuell, ähnlich wie bei den Bildern, genau diese Teile rausfiltern.

      Grüße, Matze

      1. Hallo

        Code an getimagesize() vorbei zu schleusen.

        Steht hier genauso, allerdings wird, soweit ich das beim Ueberfliegen festgestellt habe, nur eine properietaere Loesung angeboten.

        [...] vor getimagesize() auch ruhig ein @ schreiben[...]
        Kann man. Allerdings schreib ich das @ vor imagecreatefrom...() um dessen Fehler abzufangen. Mit getimagesize() hatte ich nie Probleme.

        Um ein Einfachstbeispiel zu nennen, speichere sowas wie
        boeser_code()
        als cooles_bild.jpg, da wuerdest du schon an getimagesize scheitern, aber egal, du weisst auf was es mir ankommt.

        Das mit dem PDF habe ich in der Art nie probiert, kann aber gut sein, dass du recht hast. Was du auch in Betracht ziehen koenntest, waere, Formate wie odt, docx etc. probeweise zu entzippen

        Dieter