Safe mode в PHP
Довідник системного адміністратора
Довідник системного адміністратора
Безпека та захищений режим. PHP Safe Mode
Таблиця 1. Конфігураційні опції, що управляють захищеним режимом та питаннями безпеки
| safe_mode | "0" | PHP_INI_SYSTEM |
| safe_mode_gid | "0" | PHP_INI_SYSTEM |
| safe_mode_include_dir | NULL | 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 | NULL | PHP_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. Функції, що обмежені в безпечному режимі (не претендує на повноту)