Die eigene php.ini
Ein Beispiel für eine sichere „php.ini“ ist im Folgenden genauer beschrieben.Jeder Webhoster sollte das Anlegen einer eigenen „php.ini“-Datei unterstützen, da man nur so selber etwas für die Sicherheit seines Server und Joomla! selbst tun kann.
Beachten Sie bitte unbedingt die Fußnoten zu einigen Zeilen in der Legende unten!
### Security - General ###
safe_mode = Off 1
# expose_php: Only work in PHP5
expose_php = Off 2
register_globals = Off 3
magic_quotes_gpc = Off 4
allow_url_fopen = Off 5
allow_url_include = Off 5
open_basedir = /Absoluter Pfad zu Joomla!/htdocs/joomla/ 6
### Security - Hide Errors ###
error_reporting = (E_ALL & ~E_NOTICE & ~E_WARNING) 7
display_errors = Off 7
### Security - Session ###
session.use_trans_sid = 0 8
# session.hash_function: Only work in PHP5
session.hash_function = 1 9
session.save_path = /Absoluter Pfad zu Joomla!/htdocs/joomla/tmp 8
# session.entropy_file: Possible other path = /dev/random
session.entropy_file = /dev/urandom 9
### Security - Upload / Memory ###
upload_tmp_dir = /Absoluter Pfad zu Joomla!/htdocs/joomla/tmp 10
upload_max_filesize = 10M 11
memory_limit = 40M 11
post_max_size = 4M 11
max_execution_time = 60 11
max_input_time = 60 11
### Security - Disabled functions ###
disable_functions = escapeshellcmd, exec, highlight_file, ini_restore, link, passthru, pfsockopen, phpinfo, popen, proc_nice, proc_open, shell_exec, show_source, symlink, system 12
Fußnoten:
1 safe_mode: Hier wird sichergestellt, dass Joomla! nicht mit PHPs Safe Mode läuft, da Joomla! damit nicht umgehen kann und eine Aktivierung nur zu Problemen führen würde.
2 expose_php: Die Deaktivierung dieser Funktion sorgt dafür, dass wenn der Webserver ein Dokument ausliefert er dem Browser nicht mitteilt, dass es eine PHP-Seite ist.
3 register_globals: Dieses alte PHP-Format wird nur noch von alten Scripten verwendet und kann bei neuen zu Problemen führen, deswegen deaktivieren wir es.
4 magic_quotes_gpc: Diese Option wird deaktiviert, da ihr Nutzen umstritten ist, sie Performance frisst und deswegen wird sie auch in PHP 6 entfernt.
5 allow_url_fopen & allow_url_include: Mit der Deaktivierung dieser Funktionen sorgen wir dafür, dass wir keine fremden Dateien von anderen Servern bekommen.
Achtung!: Die Funktion „Von URL installieren“ unter „Installieren/Deinstallieren“ funktioniert jetzt nicht mehr!
6 open_basedir: Hier sperren wir Joomla! in seinem eigenen Pfad ein, sodass kein Script außerhalb des Joomla!-Verzeichnisses irgendeinen Zugriff bekommt.
Hinweis: Dieser Eintrag macht nur Sinn, wenn Joomla! nicht im sog. „Document-Root“ installiert ist, sondern in einem Unterverzeichnis!
Hinweis: Der abschließende Slash („/“) ist wichtig! Wird dieser weggelassen, so ist der Schutz nicht gegeben!
7 error_reporting & display_errors: Es werden dem Benutzer keine Fehler & Hinweise angezeigt, auch wenn es welche geben sollte. Fehler würden einem Angreifer nämlich wertvolle Informationen über den Server geben.
8 session.use_trans_sid & session.save_path: Hier legen wir fest, dass keine Sitzungsinformationen an die URL angehängt werden und dass die Sitzungsdaten in einem von uns kontrollierten Verzeichnis gespeichert werden und nicht zentral in einem Verzeichnis des Hosters.
9 session.hash_function & session.entropy_file: Die erste Funktion legt den sog. Prüfsummen-Algorithmus von Sitzungs-IDs fest (wir benutzen hier nicht MD5 [128 Bit] sondern SHA-1[160 Bit]), die zweite Funktion verschlüsselt die Sitzungs-ID zusätzlich.
10 upload_tmp_dir: Wenn etwas hochgeladen wird, wird es in ein Verzeichnis gespeichert, dass von uns kontrolliert werden kann und nicht zentral beim Hoster liegt.
11 Limits: Hier setzten wir einige Limits, z.B. die maximale Uploadgröße von Dateien, wie Lange ein Script ausgeführt werden darf etc.
12 disable_functions: Wir deaktivieren hier einige Funktionen, die viel Schaden anrichten können.
Hinweis: Mit „phpinfo“ werden die PHP-Informationen im Backend unter „Hilfe“ → „Systeminfo“ unterdrückt!
1 safe_mode: Hier wird sichergestellt, dass Joomla! nicht mit PHPs Safe Mode läuft, da Joomla! damit nicht umgehen kann und eine Aktivierung nur zu Problemen führen würde.
2 expose_php: Die Deaktivierung dieser Funktion sorgt dafür, dass wenn der Webserver ein Dokument ausliefert er dem Browser nicht mitteilt, dass es eine PHP-Seite ist.
3 register_globals: Dieses alte PHP-Format wird nur noch von alten Scripten verwendet und kann bei neuen zu Problemen führen, deswegen deaktivieren wir es.
4 magic_quotes_gpc: Diese Option wird deaktiviert, da ihr Nutzen umstritten ist, sie Performance frisst und deswegen wird sie auch in PHP 6 entfernt.
5 allow_url_fopen & allow_url_include: Mit der Deaktivierung dieser Funktionen sorgen wir dafür, dass wir keine fremden Dateien von anderen Servern bekommen.
Achtung!: Die Funktion „Von URL installieren“ unter „Installieren/Deinstallieren“ funktioniert jetzt nicht mehr!
6 open_basedir: Hier sperren wir Joomla! in seinem eigenen Pfad ein, sodass kein Script außerhalb des Joomla!-Verzeichnisses irgendeinen Zugriff bekommt.
Hinweis: Dieser Eintrag macht nur Sinn, wenn Joomla! nicht im sog. „Document-Root“ installiert ist, sondern in einem Unterverzeichnis!
Hinweis: Der abschließende Slash („/“) ist wichtig! Wird dieser weggelassen, so ist der Schutz nicht gegeben!
7 error_reporting & display_errors: Es werden dem Benutzer keine Fehler & Hinweise angezeigt, auch wenn es welche geben sollte. Fehler würden einem Angreifer nämlich wertvolle Informationen über den Server geben.
8 session.use_trans_sid & session.save_path: Hier legen wir fest, dass keine Sitzungsinformationen an die URL angehängt werden und dass die Sitzungsdaten in einem von uns kontrollierten Verzeichnis gespeichert werden und nicht zentral in einem Verzeichnis des Hosters.
9 session.hash_function & session.entropy_file: Die erste Funktion legt den sog. Prüfsummen-Algorithmus von Sitzungs-IDs fest (wir benutzen hier nicht MD5 [128 Bit] sondern SHA-1[160 Bit]), die zweite Funktion verschlüsselt die Sitzungs-ID zusätzlich.
10 upload_tmp_dir: Wenn etwas hochgeladen wird, wird es in ein Verzeichnis gespeichert, dass von uns kontrolliert werden kann und nicht zentral beim Hoster liegt.
11 Limits: Hier setzten wir einige Limits, z.B. die maximale Uploadgröße von Dateien, wie Lange ein Script ausgeführt werden darf etc.
12 disable_functions: Wir deaktivieren hier einige Funktionen, die viel Schaden anrichten können.
Hinweis: Mit „phpinfo“ werden die PHP-Informationen im Backend unter „Hilfe“ → „Systeminfo“ unterdrückt!
Quellen:
http://docs.joomla.org/Php.ini (engl.)
http://docs.joomla.org/Security_Checklist_2_-_Hosting_and_Server_Setup (engl.)
http://docs.joomla.org/Php.ini (engl.)
http://docs.joomla.org/Security_Checklist_2_-_Hosting_and_Server_Setup (engl.)