безопасен режим в 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_varsPHP_PHP_INI_SYSTEM
safe_mode_protected_env_varsLD_LIBRARY_PATHPHP_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. Функции, ограничени в безопасен режим (не претендира, че е пълна)