Foxy: welche Dateirechte für Upload?

Guten Abend!

Ich schreibe gerade an einem Script für eine Bildergalerie.
Jetzt bin ich dabei den Upload zu realisieren und frag mich nun welche Rechte ich dem Ordner, in dem die Bilder landen, und den Dateien geben muss.

Das Script und der Ordner für die Bilder befinden sich in verschiedenen Verzeichnissebenen, z.B. Script -> domain.tld/incs/upload/script.php und das Bild soll nach domain.tld/uploads/BILDORDNER/
Muss ich dabei zusätzlich etwas beachten?

Und eine Bonusfrage ;)
Was ist die gängige Methode die Dateien zu überprüfen?
Ich mein der Header und die Dateiendung müssen ja nicht zwangsläufig stimmen, oder?
Ist es eine gute Idee die Bilder nach dem Upload serverseitig über die image-Funktionen neu zu erstellen um Schadsoftware auszuschließen?

Foxy

  1. Hallo,

    Jetzt bin ich dabei den Upload zu realisieren und frag mich nun welche Rechte ich dem Ordner, in dem die Bilder landen, und den Dateien geben muss.

    Na wenn die Ordner "PHP" "gehören", das ist dann wohl der Webserver, dann reichen die schreib- und leserechte wohl, oder? Sonst müsste wohl der Rest der Welt auch welche haben, weil "wwwrun" sicherlich zur Gruppe "wwwrun" gehört, und nicht zur "ftpuserxyz".

    Gruß

    jobo

    1. Hi jobo!

      Na wenn die Ordner "PHP" "gehören"(..)

      Huch, das hab ich ganz vergessen.
      Ich möchte auch per FTP auf die Dateien und Ordner zugreifen können.
      Sollte ich gleich die FTP-Funktionen nehmen?

      Also ftp_connect() usw. anstatt einfach move_uploaded_file()?

      Foxy

      1. Hallo,

        ftp-funktionen würde ich nur nehmen, wenn nur ein ftp-server zur verfügung steht auf der gegenseite. wenn verschiedene user und groups darauf zugreifen sollen, musst du wohl 755 als Rechte setzen, würde ich sagen.

        Gruß

        jobo

        1. Hey jobo!

          ftp-funktionen würde ich nur nehmen, wenn nur ein ftp-server zur verfügung steht auf der gegenseite. wenn verschiedene user und groups darauf zugreifen sollen, musst du wohl 755 als Rechte setzen, würde ich sagen.

          Ja ich hab mir auch Gedanken gemacht, dass es zu Problem kommen kann wenn sich zu viele Benutzer gleichzeitig auf dem FTP-Server anmelden.

          Danke und gute Nacht!

          Foxy

        2. Yerf!

          ftp-funktionen würde ich nur nehmen, wenn nur ein ftp-server zur verfügung steht auf der gegenseite. wenn verschiedene user und groups darauf zugreifen sollen, musst du wohl 755 als Rechte setzen, würde ich sagen.

          Für den Ordner schon. Bei Bildern wohl eher 644, oder? Die will man eigentlich nicht unbedingt als ausführbar markieren...

          Gruß,

          Harlequin

          --
          <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
          1. Hallo,

            Für den Ordner schon. Bei Bildern wohl eher 644, oder? Die will man eigentlich nicht unbedingt als ausführbar markieren...

            Weil er nach dem Ordner fragte. Ob er sich die Mühe macht, die Rechte für die Bilder noch anzupassen. Die will er ja nur hochladen, das macht doch dann wwwrun:wwwrun oder wie auch immer der Apache heißt, oder? Und hat doch bestimmt irgendeine Voreinstellung (hat das was mit umask zu tun)? Ansonsten klar, Besitzer will schreiben und lesen, der Rest wäre ja fast wurscht. 600 müsste es auch tun, oder? Falls man sie nicht per ftp löschen wollen würde.

            Gruß

            jobo

            1. Yerf!

              Weil er nach dem Ordner fragte.

              Seine Frage ging nach beidem, deshalb hab ich das nochmal auseinandergezogen.

              Ob er sich die Mühe macht, die Rechte für die Bilder noch anzupassen. Die will er ja nur hochladen, das macht doch dann wwwrun:wwwrun oder wie auch immer der Apache heißt, oder?

              Die Rechte sollten eigentlich automatisch passe, man sollte es aber zur Sicherheit einimal kontrollieren.

              600 müsste es auch tun, oder? Falls man sie nicht per ftp löschen wollen würde.

              Jo. Für ein Löschen per FTP ist dann je nach Aufteilung der Gruppen evtl. sogar ein 666 notwendig (wenn ftp und Apache unterschiedlichen Gruppen angehören). Einer der Nachteile der "klassischen" Rechterverwaltung von Unix.

              Gruß,

              Harlequin

              --
              <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
            2. Hello,

              Weil er nach dem Ordner fragte. Ob er sich die Mühe macht, die Rechte für die Bilder noch anzupassen. Die will er ja nur hochladen, das macht doch dann wwwrun:wwwrun oder wie auch immer der Apache heißt, oder? Und hat doch bestimmt irgendeine Voreinstellung (hat das was mit umask zu tun)? Ansonsten klar, Besitzer will schreiben und lesen, der Rest wäre ja fast wurscht. 600 müsste es auch tun, oder? Falls man sie nicht per ftp löschen wollen würde.

              Das hat bei Linux etwas mit der Primary Group des Users zu tun und mit dem Sticky-Bit des Verzeichnisses, in das man die Datei legt.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
  2. Hello,

    Die Bilder sollten z.B. mit getimagesize()
    http://de3.php.net/manual/en/function.getimagesize.php
    darauf geprüft werden, ob sie eine gültigen Bildtyp enthalten.

    (Da kann immer noch ein Virus oder ein Script drin versteckt sein, aber das ist dann ohne weiteres nicht lauffähig)

    Un dann sollte das Verzeichnis, in dem die Bilder abgelegt werden, kein PHP ausführen

    ### .htaccess
        php_value engine off

    oder noch besser, diese Direktive im Virtual-Host-Container vornehmen

    php_admin_value engine off

    Und wie man aus dem Beispiel mit .htaccess sehen kann, muss man auch sicherstellen, dass einem niemand eine .htaccess-Datei hochladen kann und auch keine php.ini Es wäre ja leicht, Bildern einfach diesen Namen zu geben und schon wären eventuell die Originale überschrieben.

    Solltest Du also ein .htaccess-Datei benutzten sollte die auf jeden Fall schreibgeschützt sein für den normalen PHP-Prozess.

    Die Namen der Bilder, die der Client liefert, solltest Du auch nicht übernehmen. Mindestens müssen sie aber geprüft werden, ob keine Pfade enthalten sind und wenn der Name schon vorhanden ist, sollte das nicht ohne "Überschreiben-erwünscht-Checkbox" möglich sein für diejenigen User, die das dürfen.

    Wenn mehrere User hochladen dürfen, daher entweder für jeden ein eigenes Ablageverzeichnis OHNE ENGINE, oder z.B. die Usernummer voranstellen ->    13548.bildname.jpg

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Guten Morgen Tom!

      Die Bilder sollten z.B. mit getimagesize()(...)
      darauf geprüft werden,
      (Da kann immer noch ein Virus oder ein Script drin versteckt sein, aber das ist dann ohne weiteres nicht lauffähig)

      Deshalb meine Idee per PHP ein neues Bild aus dem Original zu erzeugen.
      Wär ich damit nicht auf der sicheren Seite?

      Un dann sollte das Verzeichnis, in dem die Bilder abgelegt werden, kein PHP ausführen
      oder noch besser, diese Direktive im Virtual-Host-Container vornehmen

      php_admin_value engine off

      Damit habe ich mich noch gar nicht beschäftigt.
      Gibt es dazu was im Internet zu lesen? (Hab jetzt nicht gesucht)
      Ich wüsste jetzt nämlich nicht was ein Virtual-Host-Container ist oder wo und wie ich den Pfad zu meinem Ordner angeben müsste.

      (...)muss man auch sicherstellen, dass einem niemand eine .htaccess-Datei hochladen kann und auch keine php.ini

      Naja, bei einer .htaccess leuchtet mir das noch ein.
      Aber an die php.ini kommt man doch gar nicht ran oder? Die liegt doch ausserhalb des Zugriffsbereichs den ich über einen Browser habe oder?

      Solltest Du also ein .htaccess-Datei benutzten sollte die auf jeden Fall schreibgeschützt sein für den normalen PHP-Prozess.

      Ich werd wohl die .htaccess wie von dir vorgeschlagen verwenden.
      Aber welche Rechte sind das dann, damit sie für PHP schreibgeschützt ist?

      Wenn mehrere User hochladen dürfen, daher entweder für jeden ein eigenes Ablageverzeichnis OHNE ENGINE, oder z.B. die Usernummer voranstellen ->    13548.bildname.jpg

      Genau genommen soll jedes Bild die ID eines entsprechenden Datensatzes aus einer MySQL-Tabelle bekommen. Ein Problem mit dem Dateinamen werde ich so also nicht haben.

      Foxy

      1. Hello,

        Naja, bei einer .htaccess leuchtet mir das noch ein.
        Aber an die php.ini kommt man doch gar nicht ran oder? Die liegt doch ausserhalb des
        Zugriffsbereichs den ich über einen Browser habe oder?

        Kommt darauf an, ob Du eine Modulversion oder eine CGI-Version von PHP benutzt

        Genau genommen soll jedes Bild die ID eines entsprechenden Datensatzes aus einer MySQL-Tabelle bekommen. Ein Problem mit dem Dateinamen werde ich so also nicht haben.

        Das ist gut. Möglichst keinerlei Daten, die vom Client kommen, dierkt abrufbar machen.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de