Я хочу отключить некоторые функции на сервере, чтобы повысить безопасность сервера. Я выполнил следующие шаги:
ШАГ 1 открыто php.ini
файл: vi /etc/php.ini
ШАГ 2 найти disable_functions
и установите новый список следующим образом: disable_functions = exec, passthru, shell_exec, system
ШАГ 3 перезапуск службы httpd
С помощью описанных выше шагов я могу отключить все вышеперечисленные функции. Теперь эти функции больше не доступны на сервере.
Если я хочу включить или отключить эти функции для определенных каталогов, тогда это возможно или нет?
Нет, это невозможно сделать надежным способом. В настоящее время php не предоставляет возможности занести в белый список определенные каталоги для определенных функций. Можно написать специальную функцию, которая разрешает выполнение «запрещенных» функций в определенных каталогах, но это означает, что вы должны разрешить их глобально, и это не помешает программистам напрямую обращаться к запрещенным функциям.
Параметр disable_functions доступен только внутри php.ini, любые другие способы его перезаписи недопустимы (например: ini_set
или через конфиги apache).
Так что на самом деле у вас есть 2 варианта, использовать его или нет, но между ними нет.
Источник: http://php.net/manual/en/ini.core.php#ini.disable-functions
И в частности это:
Эта директива должна быть установлена в php.ini. Например, вы не можете установить ее в httpd.conf.
@slm Это одна стратегия, но она не удерживает их от эскалации за пределы каталога, так что это действительно было бы фасадом и неясным способом сделать это. Даже если это сработает.
Я думаю, вы могли бы это изменить и не отключать функции в вашем php.ini
файл, но затем отключите их для каждого каталога на основе каталога в любом .htaccess
файл или ваш Apache httpd.conf
файл, если вы используете Apache в качестве веб-сервера. Другие веб-серверы, скорее всего, тоже предлагают эту функцию.
Согласно этому Сообщение блога, вы можете переопределить настройки флага и значения php в php.ini
в твоем .htaccess
файл.
Например, вы можете сделать следующее:
# .htaccess in directory X
php_value disable_functions exec,passthru,shell_exec,system
-или- чтобы снова включить его:
# .htaccess in directory X
php_value disable_functions null
Вышеупомянутое не проверено мной, поэтому я не уверен, сработает ли это для вас или нет. Также я могу понять некоторую путаницу вокруг этого объекта в PHP
. Согласно Документация PHP это не похоже на то, что вышеперечисленное возможно за пределами php.ini
файл.
disable_functions строка
Эта директива позволяет отключать определенные функции по соображениям безопасности. Он принимает список имен функций, разделенных запятыми. disable_functions не зависит от безопасного режима.
С помощью этой директивы можно отключить только внутренние функции. Это не влияет на пользовательские функции.
Эта директива должна быть установлена в php.ini. Например, вы не можете установить ее в httpd.conf.