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

в 23:02, , рубрики: php, remote code execution, безопасность, безопасность веб-приложений, системное администрирование, метки: , , ,

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

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

PHPIniDir /etc/httpd

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

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

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

Автор: pentarh

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js