PHP - отключение функций

  • user warning: Duplicate entry '30188485' for key 'PRIMARY' query: INSERT INTO accesslog (title, path, url, hostname, uid, sid, timer, timestamp) values('Самоучитель C++', 'node/144', 'http://muff.kiev.ua/content/samouchitel-c', '216.73.216.61', 0, 'tv2rn4grq853u2cqc7cejj3gc7', 143, 1767726452) in /usr/local/www/muff.kiev.ua/modules/statistics/statistics.module on line 63.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:5a4cca6ae5fc3318a0794b7d75b88049' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><img alt=\"PHP logo\" width=\"140\" height=\"98\" src=\"http://muff.kiev.ua/files/php-logo.jpg\" /></p>\n<p class=\"rtejustify\">&nbsp;</p>\n<p class=\"rtejustify\">Работая над безопасностью хостинг-сервера, совсем неплохо отключать &quot;небезопасные&quot; возможности PHP.</p>\n<p class=\"rtejustify\">В настройках по умолчанию,&nbsp;используя PHP, есть возможность выполнять системные команды через PHP-скрипты.&nbsp;Можно просмотреть содержимое директорий с помощью утилиты <strong>ls</strong>, выполнить вывод файла с помощью утилиты <strong><a href=\"http://muff.kiev.ua/content/cat-obedinit-i-napechatat-faily\">cat</a></strong>, видеть свои процессы,&nbsp;etc.</p>\n<p class=\"rtejustify\">Ети возможности серьезно подрывают безопасность сервера, особенно в случае хостинг-сервера. Чтобы повысить безопасность, отключим некоторые функции. Для этого в файле <strong>/usr/local/etc/php.ini</strong> допишем функции,&nbsp;которые хотим запретить,&nbsp;в параметр <strong>disable_functions</strong>:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>disable_functions = exec,ini_get,ini_get_all,parse_ini_file,passthru,php_uname,popen,proc_open,shell_exec,show_source,system</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">После внесения изменений необходимо дать команду <strong>Apache</strong> перечитать изменения:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># apachectl graceful</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Описание указанных функций:</p>\n<ul>\n<li><strong>exec </strong>- вызов внешней программы</li>\n<li><strong>ini_get</strong> - получает значение опции конфигурации</li>\n<li><strong>ini_get_all</strong> - получает все опции конфигурации</li>\n<li><strong>parse_ini_file</strong> - разбирает файл конфигурации</li>\n<li><strong>passthru </strong>- вызов внешней программы и вывод &quot;сырых&quot; результата на дисплей</li>\n<li><strong>php_uname</strong> - возвращает информацию об ОС, на которой php был построен</li>\n<li><strong>popen </strong>- открывает файловый указатель процесса</li>\n<li><strong>proc_open</strong> - выполняет команду и открывает файловый указатель для ввода/вывода</li>\n<li><strong>shell_exec</strong> - выполняет команду в оболочке/shell и возвращает полный вывод в виде строки</li>\n<li><strong>show_source </strong>- вывод исходного текста текущей веб страницы</li>\n<li><strong>system </strong>- вызов внешней программы и вывод результата на дисплей</li>\n</ul>\n<p class=\"rtejustify\">&nbsp;Также стоит подумать над отключением таких функций:</p>\n<ul>\n<li><strong>diskfreespace </strong>- псевдоним функции disk_free_space</li>\n<li><strong>disk_free_space</strong>&nbsp;- получить размер доступного пространства в каталоге</li>\n<li><strong>disk_total_space</strong>&nbsp;- возвращает общий размер диска</li>\n<li><strong>eval </strong>- вычисляет строку, заданную в code_str, как код PHP (eval ( string code_str))</li>\n<li><strong>fileperms </strong>- получить информацию о правах на файл</li>\n<li><strong>fopen </strong>- открывает файл или URL</li>\n<li><strong>opendir </strong>- возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir()</li>\n<li><strong>phpinfo </strong>- выводит всю информацию об php, Ос</li>\n<li><strong>phpversion </strong>- выводит версию php</li>\n<li><strong>posix_getpwuid </strong>- возвращает информацию о пользователе по его user id</li>\n<li><strong>posix_getgrgid</strong> - возвращает информацию о группе по её group id</li>\n<li><strong>posix_uname</strong> - получает системное имя, возвращает хэш строк с информацией о системе</li>\n</ul>\n<p class=\"rtejustify\"><span style=\"color: #ff0000\">Примечание</span>: после отключения функции popen перестали отрисовываться графики в <a href=\"http://muff.kiev.ua/content/cacti-naglyadnaya-statistika\">Cacti</a>, поэтому для определенных ресурсов эти функции все же можно оставить включенными. Конечно, необходимо быть уверенным в том,&nbsp;что возможность заливать и модифицировать файлы есть только у доверенного круга лиц.</p>\n', created = 1767726461, expire = 1767812861, headers = '', serialized = 0 WHERE cid = '2:5a4cca6ae5fc3318a0794b7d75b88049' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ce9a18f8636e8b45fc1946e5f35fa641' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Спасибо, хорошая статья. Можно было бы добавить информацию о том, как разрешить данные функции в &lt;VirtualHost&gt; в Apache. То есть &quot;Запретить все и разрешить только нужные&quot;</p>\n', created = 1767726461, expire = 1767812861, headers = '', serialized = 0 WHERE cid = '2:ce9a18f8636e8b45fc1946e5f35fa641' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:81d4645fd8a5c58a958b6fe39845abfc' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Безопасность это конечно хорошо. Но вот например с запрещенной функцией&nbsp;<strong>proc_open&nbsp;</strong>не работает нормально просмотр картинок и загрузка их на сервер в таких редакторах как tinyMCE и CKEditor - выдает ошибку&nbsp;&nbsp;<strong>Unable To Connect To Backend</strong>&nbsp; &nbsp; Наверное нужно как то обеспечивать безопасность, а не просто отключив нужные функции...</p>\n', created = 1767726461, expire = 1767812861, headers = '', serialized = 0 WHERE cid = '2:81d4645fd8a5c58a958b6fe39845abfc' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:20ea19ca2ffd2a3dcb2560cd56c5c69f' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Отключаем глобально.</p>\n<p class=\"rtejustify\">Если есть необходимость - включаем, или подключаем локально через <strong>.htaccess</strong>. Тоесть нужно разрешить только то, что действительно необходимо, по возможности - только в определенном каталоге.</p>\n', created = 1767726461, expire = 1767812861, headers = '', serialized = 0 WHERE cid = '2:20ea19ca2ffd2a3dcb2560cd56c5c69f' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767726461, expire = 1767812861, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767726461, expire = 1767812861, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767726462, expire = 1767812862, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

PHP logo

 

Работая над безопасностью хостинг-сервера, совсем неплохо отключать "небезопасные" возможности 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 перечитать изменения:

# apachectl graceful

Описание указанных функций:

  • 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, поэтому для определенных ресурсов эти функции все же можно оставить включенными. Конечно, необходимо быть уверенным в том, что возможность заливать и модифицировать файлы есть только у доверенного круга лиц.

Ваша оценка: Нет Средняя: 4.5 (6 голосов)

Re: PHP - отключение функций

Спасибо, хорошая статья. Можно было бы добавить информацию о том, как разрешить данные функции в <VirtualHost> в Apache. То есть "Запретить все и разрешить только нужные"

Re: PHP - отключение функций

Безопасность это конечно хорошо. Но вот например с запрещенной функцией proc_open не работает нормально просмотр картинок и загрузка их на сервер в таких редакторах как tinyMCE и CKEditor - выдает ошибку  Unable To Connect To Backend    Наверное нужно как то обеспечивать безопасность, а не просто отключив нужные функции...

Re: PHP - отключение функций

Отключаем глобально.

Если есть необходимость - включаем, или подключаем локально через .htaccess. Тоесть нужно разрешить только то, что действительно необходимо, по возможности - только в определенном каталоге.

Вставай, Україно!

Литература

Резистор на 2 килобайта.