Podręcznik PHP
Poprzedni
Następny
Rozdział 22.
Tryb bezpieczny
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:
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):
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:
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
??
Poprzedni
Spis treści
Następny
Stałe połączenia z bazami danych
Początek rozdziału
Using PHP from the command line