Kapitola 22. Bezpečný režim

Obsah
Funkce omezené/deaktivované v bezpečném režimu

Bezpečný režim PHP je pokus o řešení bezpečnosti sdílených serverů . Je architekturálně nekorektní pokoušet se řešit tento problém na úrovni PHP , ale protože řešení na úrovni webovského serveru a operačního systému nejsou příliš realistická , mnoho lidí , zvlaště ISP , používá nyní bezpečný režim .

Konfigurační direktivy , které ovládají bezpečný režim :

 
safe_mode

 
=

 
Off

 
open_basedir

 
=

 
safe_mode_exec_dir

 
=

 
safe_mode_allowed_env_vars

 
=

 
PHP_

 
safe_mode_protected_env_vars

 
=

 
LD_LIBRARY_PATH

 
disable_functions

 
=





Pokud je safe_mode zapnutý , PHP kontroluje , je-li vlastník běžícího skriptu vlastníkem souboru , s nímž se manipulovat . Například :




Spuštění skriptu script.php



bude mít v bezpečném režimu za výsledek tuto chybu:













Pokud namísto safe_mode nastavíte adresář open_basedir , potom všechny operace se soubory budou omezeny pod specifikovaný adresář . Například ( příklad Apache httpd.conf ) :




Když spustíte tentýž soubor script.php s timto nastavením open_basedir , dostanete tento výsledek:









Můžete také vypnout jednotlivé funkce . Pokud přidáme toto do souboru php.ini :




získáme takovýto výstup:





Funkce omezené/deaktivované v bezpečném režimu

Toto je pravděpodobně neúplný a možná nesprávný přehled funkcí omezených v bezpečném režimu .

Tabulka 22-1 . Funkce omezené v bezpečném režimu

Funkce Omezení
dbmopen( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
dbase_open( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
filepro( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
filepro_rowcount( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
filepro_retrieve( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
ifx_*( ) sql_safe_mode restrictions , ( != safe mode )
ingres_*( ) sql_safe_mode restrictions , ( != safe mode )
mysql_*( ) sql_safe_mode restrictions , ( != safe mode )
pg_loimport( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
posix_mkfifo( ) Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript .
putenv( ) Obeys the safe_mode_protected_env_vars and safe_mode_allowed_env_vars ini-directives . Viz také dokumentaci putenv( )
move_uploaded_file( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
chdir( ) Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript .
dl( ) Tyto funkce jsou v bezpečném režimu ( safe-mode ) deaktivovány .
backtick operátor Tyto funkce jsou v bezpečném režimu ( safe-mode ) deaktivovány .
shell_exec( ) (funkční ekvivalent backticks ) Tyto funkce jsou v bezpečném režimu ( safe-mode ) deaktivovány .
exec( ) Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir . Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty . . .
system( ) Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir . Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty . . .
passthru( ) Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir . Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty . . .
popen( ) Můžete spouštět programy pouze uvnitř adresáře safe_mode_exec_dir . Z praktických důvodů není momentálně možné mít v cestě k souboru s programem komponenty . . .
mkdir( ) Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript .
rmdir( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
rename( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript .
unlink( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript .
copy( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript . ( pro source a target )
chgrp( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
chown( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript .
chmod( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Navíc nemůžete nastavovat SUID , SGID a sticky bit
touch( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript .
symlink( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript . ( pozn. : testován je pouze cíl )
link( ) Kontroluje , zda soubory / adresáře , se kterými pracujete , mají stejné UID jako spuštěný skript . Kontroluje , zda adresář , ve kterém pracujete , stejné UID jako spuštěný skript . ( pozn. : testován je pouze cíl )
getallheaders( ) V bezpečném režimu nebudou hlavičky začínající ' authorization ' (bez ohledu na velikost písmen ) vraceny . Varování : toto nefunguje s aol-server implementací getallheaders( ) !
Jakékoli funkce které používají php4 / main / fopen_wrappers.c ? ?