- PVSM.RU - https://www.pvsm.ru -

Простая и эффективная защита от дыр в PHP-скриптах

В общем-то такая простая, но эффективная защита основана на том предположении, что программисты того или иного софта достаточно адекватно оценивают необходимость шелл-вызовов непосредственно через веб-сервер и зачастую отказываются от такого не самого лучшего способа интерактива с операционной системой.

Практика показывает, что подобные операции часто или избегают или выносят их в задачи cron. А последние, как правило, запускаются через CLI (например, "/usr/bin/php /path/to/cron.php").

Следовательно, нужно отключить шелл-вызовы именно для веб-сервера, оставив их для CLI.

Предостережение: совместимо не со всем PHP-софтом. Мой опыт системного администрирования показывает, что небольшой процент специализированного софта все-таки требует наличия шелл-вызовов в веб-серверной версии PHP. В таком случае такую защиту ставить нельзя под угрозой срыва функционала.

Совместимо с большим количеством довольно опасного PHP-ширпотреба вроде phpmyadmin, wordpress, phpbb, всевозможные форумы и CMS-ки.

Дает универсальную защиту от вебшеллов и опасных уязвимостей типа «remote code execution».

Было бы здорово просто установить директиву php.ini «disable_functions» в нужное значение только для веб-сервера. Устанавливать эту директиву в виртуалхостах apache с «ванильной» сборкой mod_php нельзя [1]. Однако можно для Apache указать альтернативную директорию, где будет лежать php.ini с этой директивой:

PHPIniDir /etc/httpd

Теперь берем наш php.ini, копируем в указанную директорию /etc/httpd и устанавливаем заветное значение:

disable_functions="popen,exec,system,passthru,proc_open,shell_exec"

Далее важно проверить отсутствие ущерба со стороны функционала веб-приложений.

Автор: pentarh


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/bezopasnost/3864

Ссылки в тексте:

[1] нельзя: http://www.php.net/manual/en/ini.core.php#ini.disable-functions