безопасен режим в PHP
Справка на системния администратор
Справка на системния администратор
Сигурност и защитен режим. PHP безопасен режим
Таблица 1. Опции за конфигурация, контролиращи защитен режим и проблеми със сигурността
безопасен режим | "0" | PHP_INI_SYSTEM |
safe_mode_gid | "0" | PHP_INI_SYSTEM |
safe_mode_include_dir | НУЛА | PHP_INI_SYSTEM |
safe_mode_exec_dir | "" | PHP_INI_SYSTEM |
safe_mode_allowed_env_vars | PHP_ | PHP_INI_SYSTEM |
safe_mode_protected_env_vars | LD_LIBRARY_PATH | PHP_INI_SYSTEM |
open_basedir | НУЛА | PHP_INI_SYSTEM |
disable_functions | "" | PHP_INI_SYSTEM |
disable_classes | "" | PHP_INI_SYSTEM |
Кратко обяснение на директивите за конфигурация
safe_mode булев
- Активиране/деактивиране на защитен режим в PHP
- Ако директиватаsafe_mode е включена, PHP ще провери дали собственикът на скрипта е същият като собственика на файла или директорията, върху която работи скриптът
safe_mode_gid булево
- По подразбиране защитеният режим проверява стойността на UID при отваряне на файл. За да смекчите леко това условие и да извършите GID проверка, трябва да зададете стойността на включено за флагаsafe_mode_gid. Указва дали да се използва или не проверката на UID (FALSE) или GID (TRUE) при достъп до файл
safe_mode_include_dir низ
-
При включване на файлове, разположени в посочената директория и всички нейни поддиректории, проверка за съответствие с U >safe_mode_exec_dir низ
- Когато PHP работи в защитен режим,system() и други функции за изпълнение на системни команди и програми отхвърлят изпълнението на програми извън тази директория
- safe_mode_allowed_env_vars string Възможността за задаване на променливи на средата е потенциална дупка в сигурността. Стойността на тази директива е разделен с двоеточие списък с префикси. В защитен режим потребителят може да променя само променливи на средата, чиито имена започват с един от посочените префикси. По подразбиране променливите, които започват с префикса PHP_, са достъпни за потребителя (например PHP_FOO=BAR)
- Забележка: Ако на тази директива е дадена празна стойност, потребителят ще може да променя всяка променлива на средата!
safe_mode_protected_env_vars низ
- Тази директива съдържа разделен с двоеточие списък с променливи на средата, чиято стойност не може да бъде променена от потребителя чрез функциятаputenv(). Стойностите на тези променливи остават защитени дори ако тяхната модификация е разрешена от директиватаsafe_mode_allowed_env_vars
open_basedir низ
- Ограничава списъка с файлове, които могат да бъдат отворени в PHP, до указаното дърво на директории, независимо дали се използва защитен режим или не.
- Всеки път, когато скриптът се опита да отвори файл, например с функциитеfopen() илиgzopen(), местоположението на файла се проверява. INако е извън указаното дърво на директориите, PHP отказва да отвори файла. Всички символни връзки се разпознават и превеждат, така че няма начин да се заобиколи това ограничение със символни връзки
- специално значение. указва, че основната директория трябва да бъде директорията, в която се намира самият скрипт. В този случай трябва да внимавате, тъй като работната директория на скрипта може лесно да се промени с помощта на функциятаchdir().
- Опциятаopen_basedir може да бъде деактивирана в конфигурационния файлhttpd.conf (например за някои виртуални хостове) по абсолютно същия начин като всяка друга директива: "php_admin_value open_basedir none"
- За Windows системи разделителят на списъка с директории е точка и запетая. За всички други операционни системи двоеточие се използва като разделител. В случай, че PHP работи като модул на уеб сървър на Apache, всички директиви open_basedir за родителските директории се наследяват
- Посочената стойност всъщност е префикс, а не име на директория. Това означава, че записът "safe_mode_include_dir = /dir/incl" ви позволява да отваряте файлове, намиращи се в директориите "/dir/include" и "/dir/incls", ако съществуват. Ако искате да укажете достъп до конкретна директория, използвайте наклонена черта в края, например: "safe_mode_include_dir = /dir/incl/"
- По подразбиране достъпът до всички файлове е разрешен.
disable_functions низ
- Тази директива ви позволява да деактивирате определени функции от съображения за сигурност. Той приема разделен с двоеточие списък от функции като своя стойност.
- disable_functions не зависи от това дали се използва защитен режим или не
- Тази директиватрябва да се посочи вphp.ini. Не можете да го използвате вhttpd.conf например
disable_classes низ
- Тази директива ви позволява да деактивирате определени класове от съображения за сигурност. Той приема разделен с двоеточие списък от класове като своя стойност.disable_classes не зависи от това дали се използва защитен режим или не.
- Тази директива трябва да бъде указана вphp.ini. Не можете да го използвате вhttpd.conf например.
Вижте също следните директиви за конфигурация:register_globals,display_errors иlog_errors
Ограничени или недостъпни PHP функции в защитен режим
Таблица 2. Функции, ограничени в безопасен режим (не претендира, че е пълна)