Rozdział 22 . Tryb bezpieczny

Spis treści
Funkcje ograniczone/wyłączone w trybie bezpiecznym

Tryb bezpieczny ( safe mode ) jest próbą rozwiązania problemów bezpieczeństwa na współdzielnym serwerze . Co prawda rozwiązywanie ich na poziomie PHP nie jest najlepszym rozwiązaniem , ale jeśli nie ma możliwości zrobienia tego na poziomie serwera www lub systemu operacyjnego , na wielu serwerach , zwłaszcza u usługodawców internetowych , używa się trybu bezpiecznego .

Dyrektywy konfiguracyjne odpowiadające za tryb bezpieczny :

 
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

 
=





Gdy opcja safe_mode jest włączona , PHP sprawdza czy właścicielem pliku na którym na którym funkcja chce operować i właścicielem uruchamianego skryptu jest ten sam użytkownik . Na przykład :




Uruchomienie script.php



z uruchomionym trybem bezpiecznym spowoduje wyświetlenie błędu:













Jeśli zamiast włączać opcję safe_mode ustawisz katalog open_basedir , wtedy wszystkie operacje plikowe bedą ograniczone do tego katalogu . Na przykład ( dla httpd.conf Apache'a ) :




Uruchomienie tego samego skryptu script.php z ustawionym katalogiem open_basedir spowoduje wyświetlenie:









Możesz także wyłączyć pojedyncze funkcje . Pamiętaj jednak , że dyrektywa disable_functions może być użyta tylko w pliku php.ini , co oznacza , że nie da się wyłączać funkcji w sekcjach VirtualHost i Directory w pliku httpd.conf . Jeśli do pliku php.ini dodasz :




po uruchomieniu skryptu otrzymasz:





Funkcje ograniczone / wyłączone w trybie bezpiecznym

Jest to najprawdopodobniej wciąż niekompletna lista funkcji ograniczonych przez tryb bezpieczny .

Tabela 22-1 . Funkcje ograniczone w trybie bezpiecznym

Funkcja Ograniczenia
dbmopen( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
dbase_open( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
filepro( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
filepro_rowcount( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
filepro_retrieve( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
ifx_*( ) Podlega ograniczeniom narzuconym przez sql_safe_mode , ( != tryb bezpieczny )
ingres_*( ) Podlega ograniczeniom narzuconym przez sql_safe_mode , ( != tryb bezpieczny )
mysql_*( ) Podlega ograniczeniom narzuconym przez sql_safe_mode , ( != tryb bezpieczny )
pg_loimport( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
posix_mkfifo( ) Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany .
putenv( ) Podlega dyrektywom safe_mode_protected_env_vars i safe_mode_allowed_env_vars w php.ini . Zobacz również dokumantację do putenv( )
move_uploaded_file( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
chdir( ) Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany .
dl( ) Ta funkcja jest niedostępna w trybie bezpiecznym
lewy apostrof Ta funkcja jest niedostępna w trybie bezpiecznym
shell_exec( ) (funkcja równoważna z lewym apostrofem ) Ta funkcja jest niedostępna w trybie bezpiecznym
exec( ) Możesz uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir . Ze względów praktycznych obecnie nie ma możliwości stosowania . . w ścieżce do programu .
system( ) Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir . Ze względów praktycznych obecnie nie ma możliwości stosowania . . w ścieżce do programu .
passthru( ) Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir . Ze względów praktycznych obecnie nie ma możliwości stosowania . . w ścieżce do programu .
popen( ) Można uruchamiać programy jedynie z katalogu zdefiniowanego dyrektywą safe_mode_exec_dir . Ze względów praktycznych obecnie nie ma możliwości stosowania . . w ścieżce do programu .
mkdir( ) Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany .
rmdir( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
rename( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany .
unlink( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany .
copy( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany . ( dla źródła i przeznaczenia )
chgrp( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
chown( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany .
chmod( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Dodatkowo , nie można ustawić bitów SUID , SGID i sticky bit .
touch( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany .
symlink( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany . ( sprawdzany jest jedynie element do którego tworzony jest link )
link( ) Sprawdza czy plik( i ) / katalogi , na których chcesz operować , mają takie same UID jak skrypt , który jest aktualnie wykonywany . Sprawdza , czy katalog , na którym chesz operować , ma takie same UID jak skrypt , który jest aktualnie wykonywany . ( sprawdzany jest jedynie element do którego tworzony jest link )
getallheaders( ) W tybie bezpiecznym , nagłowki zaczynające się od ' authorization ' (wielkość liter bez znaczenia ) nie będą zwracane . Uwaga : w implementacji dla serwera AOL ta funkcjonalność jest uszkodzona
Każda funkcja korzystająca z php4 / main / fopen_wrappers.c ? ?