Enable safe mode in php

Enable safe mode in php

Краткое разъяснение конфигурационных директив.

Включает/отключает безопасный режим в PHP. Если PHP скомпилирован с опцией —enable-safe-mode, то по умолчанию принимает значение On (включено), иначе — Off (выключено).

Данная возможность была объявлена УСТАРЕВШЕЙ, начиная с PHP 5.3.0 и была УДАЛЕНА в PHP 5.4.0.

По умолчанию в безопасном режиме при открытии файла выполняется проверка значения UID. Для того, чтобы немного смягчить это условие и выполнять проверку GID, необходимо установить значение on для флага safe_mode_gid. Определяет, использовать ли проверку UID ( FALSE ) или GID ( TRUE ) проверку при обращении к файлу.

При подключении файлов, расположенных в указанной директории и всех ее подкаталогах, проверка на соответствие значений 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.

Возможность устанавливать переменные окружения — потенциальная брешь в безопасности. Значением этой директивы является список префиксов, разделенных двоеточиями. В безопасном режиме пользователь может модифицировать только те переменные окружения, имена которых начинаются с одного из указанных префиксов. По умолчанию, пользователю доступны переменные, которые начинаются с префикса PHP_ (например, PHP_FOO=BAR).

Замечание:

В случае, если этой директиве указать пустое значение, пользователь получит возможность модифицировать ЛЮБУЮ переменную окружения!

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

Читайте также:  Php вывести массив ajax

В случае, если включена директива 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
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 ):

 php_admin_value open_basedir /docroot 

При попытке выполнить тот же самый скрипт script.php с указанной опцией open_basedir вы получите следующий результат:

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 не работают в запускаемых программах.

Источник

Безопасность и безопасный режим

Включает/отключает безопасный режим в PHP. Если PHP скомпилирован с опцией —enable-safe-mode, то по умолчанию принимает значение On (включено), иначе — Off (выключено).

Читайте также:  Bitrix модуль include php

Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.

По умолчанию в безопасном режиме при открытии файла выполняется проверка значения UID. Для того, чтобы немного смягчить это условие и выполнять проверку GID, необходимо установить значение on для флага safe_mode_gid. Определяет, использовать ли проверку UID ( FALSE ) или GID ( TRUE ) проверку при обращении к файлу.

При подключении файлов, расположенных в указанной директории и всех ее подкаталогах, проверка на соответствие значений 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.

Возможность устанавливать переменные окружения — потенциальная брешь в безопасности. Значением этой директивы является список префиксов, разделенных двоеточиями. В безопасном режиме пользователь может модифицировать только те переменные окружения, имена которых начинаются с одного из указанных префиксов. По умолчанию, пользователю доступны переменные, которые начинаются с префикса PHP_ (например, PHP_FOO=BAR).

Замечание:

В случае, если этой директиве указать пустое значение, пользователь получит возможность модифицировать ЛЮБУЮ переменную окружения!

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

Читайте также:  Jsp asp net php

В случае, если включена директива 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
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 ):

 php_admin_value open_basedir /docroot 

При попытке выполнить тот же самый скрипт script.php с указанной опцией open_basedir вы получите следующий результат:

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 не работают в запускаемых программах.

Источник

Оцените статью