Kapitel 22. Safe Mode

Inhaltsverzeichnis
Funktionen, die durch Safe Mode deaktiviert oder eingeschränkt werden

Safe Mode ist der Versuch , Sicherheitsprobleme bei gemeinsam genutzten Servern zu lösen . Bezogen auf die Systemarchitektur , ist es der falsche Ansatz , diese Probleme innerhalb der PHP Schicht lösen zu wollen . Da es auf Ebene des Webservers bzw . des Betriebssystems keine praktischen Alternativen gibt , wird Safe Mode nunmehr von vielen Leuten , vor allem von Providern , eingesetzt .

Es existieren folgende Direktiven um Safe Mode zu konfigurieren :

 
safe_mode

 
=

 
Off

 
safe_mode_gid

 
=

 
0

 
safe_mode_include_dir

 
=

 
safe_mode_exec_dir

 
=

 
open_basedir

 
=

 
safe_mode_allowed_env_vars

 
=

 
PHP_

 
safe_mode_protected_env_vars

 
=

 
LD_LIBRARY_PATH

 
disable_functions

 
=





Wenn safe_mode aktiviert ist , überprüft PHP , ob der Eigentümer des laufenden Skriptes dem Eigentümer der Datei entspricht , an der mit Hilfe der Dateifunktionen gearbeitet werden soll . Beispiel :




Bei der Ausführung dieses Skriptes



erscheint bei aktiviertem Safe Mode folgende Warnung:













Wenn anstelle von safe_mode ein open_basedir Wenn anstelle von safe_mode ein open_basedir Verzeichnis angegeben wurde , können Dateioperationen nur noch unterhalb dieses Verzeichnisses vorgenommen werden . Beispiel ( Apache httpd.conf ) :




Wenn das Skript script.php mit der open_basedir Einstellung ausgeführt wird, erscheint folgende Warnung:









Darüberhinaus können einzelne Funktionen deaktiviert werden . Würde man folgenden Eintrag in der php.ini vornehmen :




Würde diese Warnung erscheinen:





Funktionen, die durch Safe Mode deaktiviert oder eingeschränkt werden

Dies ist eine Auflistung der Funktionen , die durch Safe Mode eingeschränkt werden . Diese Liste ist möglicherweise unvollständig und fehlerhaft !

Tabelle 22-1 . Durch Safe Mode eingeschränkte Funktionen

Funktion Einschränkungen
dbmopen( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
dbase_open( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
filepro( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
filepro_rowcount( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
filepro_retrieve( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
ifx_*( ) sql_safe_mode restrictions , ( != Safe Mode )
ingres_*( ) sql_safe_mode restrictions , ( != Safe Mode )
mysql_*( ) sql_safe_mode restrictions , ( != Safe Mode )
pg_loimport( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
posix_mkfifo( ) Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst .
putenv( ) Führt die safe_mode_protected_env_vars und safe_mode_allowed_env_vars ini-directiven aus . Siehe auch Dokumentation zu putenv( )
move_uploaded_file( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
chdir( ) Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst .
dl( ) Diese Funktion ist bei Verwendung von Safe Mode deaktiviert .
backtick operator Diese Funktion ist bei Verwendung von Safe Mode deaktiviert .
shell_exec( ) (funktional gleichwertig zu den Backtick-Operatoren ) Diese Funktion ist bei Verwendung von Safe Mode deaktiviert .
exec( ) Ausführbare Dateien können nur innerhalb des durch safe_mode_exec_dir angegebenen Verzeichnisses ausgeführt werden . Aus praktischen Gründen ist es momentan nicht erlaubt , . . im Pfad zu den ausführbaren Datein anzugeben .
system( ) Ausführbare Dateien können nur innerhalb des durch safe_mode_exec_dir angegebenen Verzeichnisses ausgeführt werden . Aus praktischen Gründen ist es momentan nicht erlaubt , . . im Pfad zu den ausführbaren Datein anzugeben .
passthru( ) Ausführbare Dateien können nur innerhalb des durch safe_mode_exec_dir angegebenen Verzeichnisses ausgeführt werden . Aus praktischen Gründen ist es momentan nicht erlaubt , . . im Pfad zu den ausführbaren Datein anzugeben .
popen( ) Ausführbare Dateien können nur innerhalb des durch safe_mode_exec_dir angegebenen Verzeichnisses ausgeführt werden . Aus praktischen Gründen ist es momentan nicht erlaubt , . . im Pfad zu den ausführbaren Datein anzugeben .
mkdir( ) Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst .
rmdir( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
rename( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst .
unlink( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst .
copy( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst . ( on source and target )
chgrp( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
chown( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst .
chmod( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . In addition , you cannot set the SUID , SGID and sticky bits
touch( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst .
symlink( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst . ( note : only the target is checked )
link( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst . ( note : only the target is checked )
getallheaders( ) Header die mit ' authorization ' (unabhängig von Groß - oder Kleinschreibung ) beginnen , werden bei Verwendung von Safe Mode nicht zurückgegeben . Achtung : Dies ist fehlerhaft bei der AOL-Server Implementation der Funktion getallheaders( ) !
highlight_file( ) , show_source( ) Überprüft ob die Dateien / Verzeichnisse , die mit dem Skript bearbeitet werden sollen , die gleiche UID haben wie das Skript selbst . Überprüft ob das Verzeichnis in dem das Skript ausgeführt werden soll , die gleiche UID hat wie das Skript selbst . ( Hinweis : gilt nur ab Version PHP 4.2.1 )
Jede Funktion , die php4 / main / fopen_wrappers.c benutzt.. . ? ?