Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
safe_mode | "0" | PHP_INI_SYSTEM | Удалена в PHP 5.4.0. |
safe_mode_gid | "0" | PHP_INI_SYSTEM | Удалена в PHP 5.4.0. |
safe_mode_include_dir | NULL | PHP_INI_SYSTEM | Удалена в PHP 5.4.0. |
safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Удалена в PHP 5.4.0. |
safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Удалена в PHP 5.4.0. |
safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Удалена в PHP 5.4.0. |
Краткое разъяснение конфигурационных директив.
safe_mode
boolean
Включает/отключает безопасный режим в PHP. Если PHP скомпилирован с опцией --enable-safe-mode, то по умолчанию принимает значение On (включено), иначе - Off (выключено).
Данная возможность была объявлена УСТАРЕВШЕЙ, начиная с PHP 5.3.0 и была УДАЛЕНА в PHP 5.4.0.
safe_mode_gid
boolean
По умолчанию в безопасном режиме при открытии файла выполняется
проверка значения UID. Для того, чтобы немного смягчить это условие и
выполнять проверку GID, необходимо установить значение on для флага safe_mode_gid.
Определяет, использовать ли проверку UID (FALSE
) или
GID (TRUE
) проверку при обращении к файлу.
safe_mode_include_dir
string
При подключении файлов, расположенных в указанной директории и всех ее подкаталогах, проверка на соответствие значений UID/GID не выполняется (в случае, если установленная директория не указана в include_path, необходимо указывать полный путь при включении).
Значением этой директивы может быть список каталогов, разделенных двоеточием (точкой с запятой на Windows-системах), что аналогично синтаксису include_path. Указанное значение в действительности является префиксом, а не названием директории. Это означает, что запись "safe_mode_include_dir = /dir/incl" позволяет подключать файлы, находящиеся в директориях "/dir/include" и "/dir/incls", в случае, если они существуют. Если вы хотите указать доступ к конкретной директории, используйте завершающий слеш, например: "safe_mode_include_dir = /dir/incl/" Если значение этой директивы пусто, то никакие файлы с отличающимися UID/GID не могут быть подключены.safe_mode_exec_dir
string
В случае, когда PHP работает в безопасном режиме, system() и другие функции запуска программ отклоняют выполнение программ, находящихся вне данной директории. Вам также придется использовать / в качестве разделителя пути на всех окружениях, включая Windows.
safe_mode_allowed_env_vars
string
Возможность устанавливать переменные окружения - потенциальная брешь в безопасности. Значением этой директивы является список префиксов, разделенных двоеточиями. В безопасном режиме пользователь может модифицировать только те переменные окружения, имена которых начинаются с одного из указанных префиксов. По умолчанию, пользователю доступны переменные, которые начинаются с префикса PHP_ (например, PHP_FOO=BAR).
Замечание:
В случае, если этой директиве указать пустое значение, пользователь получит возможность модифицировать ЛЮБУЮ переменную окружения!
safe_mode_protected_env_vars
string
Эта директива содержит список переменных окружения, разделенных двоеточием, значение которых пользователь не сможет изменить, используя функцию putenv(). Значения этих переменных остаются защищенными, даже если их модификация разрешена директивой safe_mode_allowed_env_vars.
Смотрите также: open_basedir, disable_functions, disable_classes, register_globals, display_errors и log_errors
В случае, если включена директива safe_mode, PHP проверит, совпадает ли владелец скрипта и владелец файла или директории, которыми оперирует скрипт. Например:
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
<?php
readfile('/etc/passwd');
?>
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2
Тем не менее, предусмотрена возможность вместо проверки на соответствие UID использовать более мягкую проверку на соответствие GID. Для этого необходимо использовать директиву safe_mode_gid. В случае, если она установлена значением On, используется более мягкая проверка GID. В противном случае, если установлено значение Off (значение по умолчанию), выполняется более строгая проверка на соответствие UID.
В качестве альтернативы директиве safe_mode вы можете ограничить все выполняемые скрипты жестко заданным деревом директорий при помощи опции open_basedir. Например (фрагмент конфигурационного файла httpd.conf):
<Directory /docroot> php_admin_value open_basedir /docroot </Directory>
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2
Вы также можете запретить отдельные функции. Следует заметить, что директива disable_functions может быть указана исключительно в конфигурационном файле php.ini, это означает, что вы не можете, отредактировав httpd.conf, установить индивидуальные значения для конкретного виртуального хоста или каталога. Если добавить в php.ini следующую строку:
disable_functions = readfile,system
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2
Разумеется, эти ограничения PHP не работают в запускаемых программах.