web-dev-qa-db-de.com

Ist es sicher, dem _www-Benutzerkonto eine Schreibberechtigung zu erteilen?

Ich möchte PHP verwenden, um einige meiner Dateien zu ändern. Kann jedoch ein anderer Benutzer dieses Konto verwenden, um meine Dateien ohne meine Bestätigung zu ändern?

5
user65872

Es ist im Allgemeinen nicht ratsam, www oder Apache Schreibzugriff zu gewähren. Dies kann jedoch sicher geschehen, indem der Zugriff auf ein einzelnes Verzeichnis beschränkt wird und keine ausführbaren Dateien in diesem Verzeichnis zugelassen werden.

Zum Beispiel lautet das Verzeichnis Ihrer PHP-basierten Site /var/www/example.com. Sie möchten, dass Ihr Webserver so eingerichtet wird, dass der einzige ausführbare PHP-Zugriffspunkt /var/www/example.com/index.php und das einzige Verzeichnis ist auf den der Webserver schreiben kann, wäre /var/www/example.com/files. Dies ist oft, wie PHP-Webanwendungen mit Bildmanipulation umgehen.

Sie möchten auch, dass Ihr Webserver so eingestellt ist, dass keine PHP-Dateien aus dem Verzeichnis/files ausgeführt werden können.

Sie können diese Dateien auch über eine andere Quelle übertragen. PHP führt ein Shell-Skript aus, das die Dateien schreibt. Dies kann jedoch sehr kompliziert und sicher sein und einen weiteren Angriffsvektor hinzufügen. Denken Sie immer daran, je komplizierter ein Prozess ist, desto mehr Dinge können schief gehen.

Wollen Sie das Hochladen von Inhalten über den Webserver oder etwas anderes zulassen?

Unabhängig davon sollten Sie sicherstellen, dass die Berechtigungen bereits so eingerichtet sind, dass Ihr PHP Code nur an bestimmte Speicherorte (Verzeichnisse) schreiben kann. Trennen Sie sich vom Inhalt Ihrer Website. Dies kann bei billigem Shared Hosting schwierig sein.

Hochladen von Inhalten

Franks Antwort ist größtenteils richtig, aber es fehlt an Details und ein bisschen irreführend.

Sie MÜSSEN sicherstellen, dass alles, was auf den Server hochgeladen wird, nicht vom Server ausgeführt wird. Und Sie sollten mehrere Maßnahmen vorsehen, um dies zu verhindern.

Sie müssen alle Informationen, die Sie über den Inhalt erhalten, mit Argwohn behandeln. Dateipfade können ausgenutzt werden ( Pfadüberquerung ). Vom Benutzer bereitgestellte Mimetypen sind im Grunde genommen bedeutungslos - lassen Sie sich nicht von der Angewohnheit von Microsoft täuschen, eine Dateierweiterung und einen Mimetyp so zu behandeln, als würden sie dieselbe Tatsache darstellen.

Sogar Dateinamen sollten nicht als vertrauenswürdig eingestuft werden. Nachdem Sie den Inhalt überprüft haben, speichern Sie die Datei unter Verwendung eines von Ihnen generierten Pfads, Dateinamens und einer Erweiterung.

Die einfachste Lösung, um die Ausführung zu verhindern, besteht darin, sicherzustellen, dass hochgeladene Inhalte außerhalb des Dokumentstamms gespeichert werden und der gesamte Zugriff von Ihrer Site moderiert wird. Dadurch wird sichergestellt, dass die Datei nicht remote aufgerufen werden kann, indem Sie einfach die URL in einen Browser eingeben. Es schützt nicht vor Einbeziehung lokaler Dateien Sicherheitslücken.

Aber wenn Sie ein günstiges Hosting-Paket haben, ist dies möglicherweise keine Option. Alternativ können Sie die Datei im Dokumentenstamm speichern, jedoch in einem transformierten Format (z. B. verschlüsselt) mit vermitteltem Zugriff (Schutz vor Remote-Aufrufen und LFI). Sie können die PHP -Verarbeitung (d. H. Remote-Aufruf) in Apaches Hauptkonfiguration oder .htaccess deaktivieren, indem Sie php_flag engine off verwenden. Auch dies verhindert LFI nicht.

Verwenden Sie finfo_file(), um den Inhalt trivial zu validieren, und überprüfen Sie, ob der Mimetyp mit einer Whitelist übereinstimmt. Dies überprüft jedoch nur die ersten Bytes einer Datei - und kann umgangen werden. Ändern Sie zum besseren Schutz den Dateityp (z. B. jpeg in webp, gif in png, MSWord in HTML ....) mit einem robusten Tool.

Noch etwas

Es hängt wirklich von den Besonderheiten ab, was Sie zu ändern versuchen.

Sie sollten KEINEN ausführbaren Code erstellen - insbesondere PHP oder native Binärdateien. Javacript und CSS sind etwas weniger riskant (verwenden Sie ein Template-System). Bilder, PDFs und Audio/Video sollten relativ sicher sein - achten Sie jedoch auf die Berechtigungen, die Sie Ihrer PHP Laufzeit erteilen, wenn Sie lokale Binärdateien ausführen, um Vorgänge auszuführen.

2
symcbean