welche Dateirechte für Upload?
Foxy
- php
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
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
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
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
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
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
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
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
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
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
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 vornehmenphp_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
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