Работая над безопасностью хостинг-сервера, совсем неплохо отключать "небезопасные" возможности PHP.
В настройках по умолчанию, используя PHP, есть возможность выполнять системные команды через PHP-скрипты. Можно просмотреть содержимое директорий с помощью утилиты ls, выполнить вывод файла с помощью утилиты cat, видеть свои процессы, etc.
Ети возможности серьезно подрывают безопасность сервера, особенно в случае хостинг-сервера. Чтобы повысить безопасность, отключим некоторые функции. Для этого в файле /usr/local/etc/php.ini допишем функции, которые хотим запретить, в параметр disable_functions:
disable_functions = exec,ini_get,ini_get_all,parse_ini_file,passthru,php_uname,popen,proc_open,shell_exec,show_source,system |
После внесения изменений необходимо дать команду Apache перечитать изменения:
Описание указанных функций:
- exec - вызов внешней программы
- ini_get - получает значение опции конфигурации
- ini_get_all - получает все опции конфигурации
- parse_ini_file - разбирает файл конфигурации
- passthru - вызов внешней программы и вывод "сырых" результата на дисплей
- php_uname - возвращает информацию об ОС, на которой php был построен
- popen - открывает файловый указатель процесса
- proc_open - выполняет команду и открывает файловый указатель для ввода/вывода
- shell_exec - выполняет команду в оболочке/shell и возвращает полный вывод в виде строки
- show_source - вывод исходного текста текущей веб страницы
- system - вызов внешней программы и вывод результата на дисплей
Также стоит подумать над отключением таких функций:
- diskfreespace - псевдоним функции disk_free_space
- disk_free_space - получить размер доступного пространства в каталоге
- disk_total_space - возвращает общий размер диска
- eval - вычисляет строку, заданную в code_str, как код PHP (eval ( string code_str))
- fileperms - получить информацию о правах на файл
- fopen - открывает файл или URL
- opendir - возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir()
- phpinfo - выводит всю информацию об php, Ос
- phpversion - выводит версию php
- posix_getpwuid - возвращает информацию о пользователе по его user id
- posix_getgrgid - возвращает информацию о группе по её group id
- posix_uname - получает системное имя, возвращает хэш строк с информацией о системе
Примечание: после отключения функции popen перестали отрисовываться графики в Cacti, поэтому для определенных ресурсов эти функции все же можно оставить включенными. Конечно, необходимо быть уверенным в том, что возможность заливать и модифицировать файлы есть только у доверенного круга лиц.
Re: PHP - отключение функций
Спасибо, хорошая статья. Можно было бы добавить информацию о том, как разрешить данные функции в <VirtualHost> в Apache. То есть "Запретить все и разрешить только нужные"
Re: PHP - отключение функций
Безопасность это конечно хорошо. Но вот например с запрещенной функцией proc_open не работает нормально просмотр картинок и загрузка их на сервер в таких редакторах как tinyMCE и CKEditor - выдает ошибку Unable To Connect To Backend Наверное нужно как то обеспечивать безопасность, а не просто отключив нужные функции...
Re: PHP - отключение функций
Отключаем глобально.
Если есть необходимость - включаем, или подключаем локально через .htaccess. Тоесть нужно разрешить только то, что действительно необходимо, по возможности - только в определенном каталоге.