Назад | Перейти на главную страницу

Как отключить функции на серверах для определенных каталогов?

Я хочу отключить некоторые функции на сервере, чтобы повысить безопасность сервера. Я выполнил следующие шаги:

ШАГ 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.