S
server4downs
Guest
Hallo zusammen,
da ich kurz Zeit habe, habe ich mir mal gedacht hier einen kleinen Artikel zu schreiben wie man sich vor PHP-Hacks wenigstens grundlegend schützen kann.
Nicht immer ist es sinnvoll safe_mode auf ON zu stellen, da dann einige Scripts nur noch halbwegs funktionieren....
Hier ist dann nun aber Vorsicht geboten:
Auch wenn man keine Kunden oder ähnliches auf dem Server hosted kann dies eine Gefahr darstellen, sofern man keine weiteren Schritte vollzieht.
1. Beim Apache-Modul PHP (nicht CGI) ist es durchaus angebracht pro Virtualhost die open_basedir zu setzen (auch wenn safe_mode = ON).
Wie geht das?
Confixx und andere AdminCPs erledigen dies schon automatisch
Ansonsten einfach in Virtualhost-Directive schreiben:
Somit hat der entsprechende Vhost Zugriff auf
/home/www/whatever/ und /tmp.
Selbstverständlich können hier weitere paths reingehauen werden (mit Doppelpunkt).
Diese PHP-Value lässt sich nur per php.ini oder eben Vhost-File benutzen. Somit ist nicht per ini_set oder .htaccess veränderbar, was uns eine bestimmte Sicherheit gewährleistet.
2. Wir sind nun aber noch nicht fertig. Der potentielle Angreifer könnte uns immer noch am Genick packen und unseren Server für z.B. Spamming oder ähnlichen Schwachsinn ausnutzen, indem er einfach mit bestimmten PHP-Standart-Functions entspr. Files auf den Server in die zugelassenen Dirs läd und diese dann ausführt (ich spreche aus Erfahrung!).
Am sichersten ist es nun einfach noch gewissen functions zu sperren, die man eh nicht gerade tägl. braucht... Besonders die "Server-" Functions, wie z.B. exec oder system sind meiner Meinung nach zwar ein nettes Spielzeug, bieten jedoch eine extraem hohe Angriffsfläche (vor allem für unsicheres Scripting).
Nun muss man sich entweder für die Bequemlichkeit oder Sicherheit entscheiden. Ich ziehe lieber Sicherheit vor, denn die "Bequemlichkeit", d.h. das Benutzen der oben genannten Functions muss nicht nötig sein (ich komme sehr gut ohne die functions aus)...
Also, wer Sicherheit vorzieht sollte die functions entsprechend sperren:
(php.ini):
Dies wäre mal ein Beispiel. Natürlich gibt es noch weiter Functionen, die man hier sperren könnte oder manche könnte man auch rauslassen.
Per passthru wurde einer unserer Server jedoch einmal attackiert... deswegen ist hier Vorsicht geboten
disable_functions lässt sich nur per php.ini global einstellen, dies hat sicherheitsrelevante Gründe. Man könnte jedoch auch den PHP-Source anpassen und das Setzen von disable_functions per vhost zulassen. Dies ist jedoch eine andere Geschichte und soll ein anderes mal erzählt werden.
So, jetzt will ich mal zum Schluss kommen
Ich weise immer und immer wieder darauf hin, dringendst auf SAUBERES PHP-Scripting zu achten, denn nur durch Schlamperei entstehen diese security holes.
Also, vielleicht hilft dieses pseudo HowTo ja mal einem Server-Neuling
P.s.:
Wieso nur Apache-Modul und nicht CGI?
Die CGI-Version ist total anders aufgebaut. Hierbei läuft oder sollte es zumindest jeder vhost unter eigenem User.
Aber auch hier ist Vorsicht geboten... Man kann nie sicher genug vorgehen.
open_basedir sollte nicht außer Acht gelassen werden und auch so die ein oder andere Function ist auch via CGI nicht gerade ungefährlich!
da ich kurz Zeit habe, habe ich mir mal gedacht hier einen kleinen Artikel zu schreiben wie man sich vor PHP-Hacks wenigstens grundlegend schützen kann.
Nicht immer ist es sinnvoll safe_mode auf ON zu stellen, da dann einige Scripts nur noch halbwegs funktionieren....
Hier ist dann nun aber Vorsicht geboten:
Auch wenn man keine Kunden oder ähnliches auf dem Server hosted kann dies eine Gefahr darstellen, sofern man keine weiteren Schritte vollzieht.
1. Beim Apache-Modul PHP (nicht CGI) ist es durchaus angebracht pro Virtualhost die open_basedir zu setzen (auch wenn safe_mode = ON).
Wie geht das?
Confixx und andere AdminCPs erledigen dies schon automatisch
Ansonsten einfach in Virtualhost-Directive schreiben:
Code:
php_admin_value open_basedir /home/www/whatever/:/tmp
/home/www/whatever/ und /tmp.
Selbstverständlich können hier weitere paths reingehauen werden (mit Doppelpunkt).
Diese PHP-Value lässt sich nur per php.ini oder eben Vhost-File benutzen. Somit ist nicht per ini_set oder .htaccess veränderbar, was uns eine bestimmte Sicherheit gewährleistet.
2. Wir sind nun aber noch nicht fertig. Der potentielle Angreifer könnte uns immer noch am Genick packen und unseren Server für z.B. Spamming oder ähnlichen Schwachsinn ausnutzen, indem er einfach mit bestimmten PHP-Standart-Functions entspr. Files auf den Server in die zugelassenen Dirs läd und diese dann ausführt (ich spreche aus Erfahrung!).
Am sichersten ist es nun einfach noch gewissen functions zu sperren, die man eh nicht gerade tägl. braucht... Besonders die "Server-" Functions, wie z.B. exec oder system sind meiner Meinung nach zwar ein nettes Spielzeug, bieten jedoch eine extraem hohe Angriffsfläche (vor allem für unsicheres Scripting).
Nun muss man sich entweder für die Bequemlichkeit oder Sicherheit entscheiden. Ich ziehe lieber Sicherheit vor, denn die "Bequemlichkeit", d.h. das Benutzen der oben genannten Functions muss nicht nötig sein (ich komme sehr gut ohne die functions aus)...
Also, wer Sicherheit vorzieht sollte die functions entsprechend sperren:
(php.ini):
Code:
disable_functions = exec, shell_exec, proc_open, proc_nice, escapeshellarg, escapeshellcmd, diskfreespace, passthru, system, popen, pfsockopen, link, getmyuid, set_time_limit, disk_free_space
Per passthru wurde einer unserer Server jedoch einmal attackiert... deswegen ist hier Vorsicht geboten
disable_functions lässt sich nur per php.ini global einstellen, dies hat sicherheitsrelevante Gründe. Man könnte jedoch auch den PHP-Source anpassen und das Setzen von disable_functions per vhost zulassen. Dies ist jedoch eine andere Geschichte und soll ein anderes mal erzählt werden.
So, jetzt will ich mal zum Schluss kommen
Ich weise immer und immer wieder darauf hin, dringendst auf SAUBERES PHP-Scripting zu achten, denn nur durch Schlamperei entstehen diese security holes.
Also, vielleicht hilft dieses pseudo HowTo ja mal einem Server-Neuling
P.s.:
Wieso nur Apache-Modul und nicht CGI?
Die CGI-Version ist total anders aufgebaut. Hierbei läuft oder sollte es zumindest jeder vhost unter eigenem User.
Aber auch hier ist Vorsicht geboten... Man kann nie sicher genug vorgehen.
open_basedir sollte nicht außer Acht gelassen werden und auch so die ein oder andere Function ist auch via CGI nicht gerade ungefährlich!
Last edited by a moderator: