Apache-Server gegen etwas nicht vertrauenswürdigen PHP-Code schützen?

883
Alex R

Ich habe eine ungewöhnliche Situation, in der ich mehrere Benutzer für das Hochladen und Ausführen von PHP-Code auf meinem Apache-Server benötige. Ich kann jedoch nicht zulassen, dass ein Benutzer auf die PHP-Quelle eines anderen Benutzers zugreifen kann (wenn Sie sich anhand konkreter Beispiele besser fühlen, stellen Sie sich vor, ich würde Hosting durchführen ein PHP-Programmierwettbewerb).

Folgendes habe ich bisher in der PHP.ini:

disable_functions = readfile, fpassthru, file, file_get_contents,  system, fopen, symlink, umbenennen, kopieren, exec, passthru, pcntl_exec,  backtick_operator, shell_exec, popen, proc_open 

Welche anderen Funktionen muss ich zu dieser Liste hinzufügen, um zu verhindern, dass PHP-Code auf lokale Dateien (und damit auf andere PHP-Quellen) zugreift?

4

3 Antworten auf die Frage

1
Bergman

Bitte sehen Sie sich auch http://www.suphp.org/ an, die PHP-Skripts mit Benutzerberechtigungen ausführt, anstelle des Benutzers, unter dem der Webserver läuft. Wenn Sie sicherstellen, dass der Webserver das Verzeichnis lesen kann (jedoch nicht notwendigerweise die PHP-Datei selbst), können Sie diese Dateien mit Benutzerberechtigungen ausführen. Andere Benutzer sollten in diesem Fall nicht lesen oder darauf zugreifen können. Dies sollte eine anmutigere und sicherere Art sein, damit umzugehen.

0
Jon Rhoades

Klingt so, als müssten Sie den abgesicherten Modus von PHP aktivieren, dadurch werden alle relevanten Funktionen deaktiviert.

(Beachten Sie, dass dies in 5.3 deaktiviert wurde und in PHP6 entfernt wurde.)

Ok, ich habe ein paar von der abgesicherten Seite hinzugefügt ... disable_functions = readfile, fpassthru, file, file_get_contents, system, fopen, symlink, umbenennen, kopieren, exec, Passthru, pcntl _exec, backtick_operator, shell_exec, pop_en, proc_open, chmod, chown, chgrp, touch, dl, highlight_file, show_source, parse_in i_file, mkdir, rmdir, posix_mkfifo, dbase_open, dbmopen, filepro, pg_lo_import, move_uploaded_file, link Alex R vor 14 Jahren 0
0
James Polley

Anstatt zu versuchen, innerhalb von PHP damit umzugehen, habe ich ein oder zwei Layer angehoben und Apache + Unix-Konten zum Trennen von Dingen verwendet - zum Beispiel mit suexec, um die Prozesse des Benutzers voneinander zu trennen.