Safe mode в PHP

Довідник системного адміністратора

Довідник системного адміністратора

Безпека та захищений режим. PHP Safe Mode

Таблиця 1. Конфігураційні опції, що управляють захищеним режимом та питаннями безпеки

Ім'я Значення за замовчуванням Змінюваність
safe_mode"0"PHP_INI_SYSTEM
safe_mode_gid"0"PHP_INI_SYSTEM
safe_mode_include_dirNULLPHP_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_basedirNULLPHP_INI_SYSTEM
disable_functions""PHP_INI_SYSTEM
disable_classes""PHP_INI_SYSTEM

Коротке роз'яснення конфігураційних директив

safe_mode boolean

  • Вмикає/вимикає захищений режим у PHP
  • У випадку, якщо директиваsafe_mode встановлена ​​значенням on, PHP перевірить, чи збігається власник скрипта та власник файлу чи директорії, якими оперує скрипт

safe_mode_gid boolean

  • За промовчанням у захищеному режимі під час відкриття файлу виконується перевірка значення UID. Щоб трохи пом'якшити цю умову і виконувати перевірку GID, необхідно встановити значення on для прапораsafe_mode_gid. Визначає, чи використовувати ні перевірку UID (FALSE) або GID (TRUE) перевірку при зверненні до файлу

safe_mode_include_dir string

    При підключенні файлів, розміщених у вказаній директорії та всіх її підкаталогах, перевірка на відповідність значень U>safe_mode_exec_dir string

  • У випадку, коли PHP працює в захищеному режимі,system() та інші функції для виконання системних команд та програм відхиляють виконання програм, що знаходяться поза цією директорією
  • safe_mode_allowed_env_vars string Можливість встановлювати змінні оточення — потенційний пролом у безпеці. Значенням цієї директиви є перелік префіксів, розділених двокрапками. У захищеному режимі користувач може модифікувати лише ті змінні оточення, імена яких починаються з одного із зазначених префіксів. За промовчанням користувачеві доступні змінні, які починаються з префікса PHP_ (наприклад, PHP_FOO=BAR)
  • Примітка: У випадку, якщо цій директиві вказати пусте значення, користувач матиме можливість модифікувати будь-яку змінну оточення!

safe_mode_protected_env_vars string

  • Ця директива містить список змінних оточення, розділених двокрапкою, значення яких користувач зможе змінити, використовуючи функціюputenv(). Значення цих змінних залишаються захищеними, навіть якщо їхня модифікація дозволена директивоюsafe_mode_allowed_env_vars

open_basedir string

  • Обмежує список файлів, які можуть бути відкриті в PHP, зазначеним деревом директорій незалежно від того, чи використовується захищений режим.
  • Щоразу, коли скрипт намагається відкрити файл, наприклад, за допомогою функціїfopen() абоgzopen(), перевіряється розташування файлу. УУ випадку, якщо він знаходиться поза вказаним деревом директорії, PHP відмовляє у відкриття файлу. Усі символічні посилання розпізнаються та перетворюються, тому обійти це обмеження за допомогою символічних посилань неможливо
  • Спеціальне значення. зазначає, що базової слід вважати директорію, в якій розташований сам скрипт. У цьому випадку слід бути обережним, тому що робочу директорію скрипту можна легко змінити за допомогою функції chdir() 15
  • Опція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 string

  • Ця директива дозволяє заборонити деякі функції з міркувань безпеки. Як значення вона приймає список функцій, розділених двокрапкою.
  • disable_functions не залежить від того, використовується Захищений режим чи ні
  • Ця директивамає бути вказана вphp.ini. Ви не можете використовувати її, наприклад, уhttpd.conf

disable_classes string

  • Ця директива дозволяє заборонити деякі класи з міркувань безпеки. Як значення вона приймає список класів, розділених двокрапкою.disable_classes не залежить від використання Захищеного режиму чи ні.
  • Ця директива має бути вказана вphp.ini. Ви не можете використовувати її, наприклад,httpd.conf.

Ознайомтеся також з наступними конфігураційними директивами:register_globals,display_errors, таlog_errors

Обмежені або недоступні у захищеному режимі функції PHP

Таблиця 2. Функції, що обмежені в безпечному режимі (не претендує на повноту)