Сначала честно
Временные меры сужают поверхность атаки, но не закрывают уязвимость. Они годятся как выигрыш нескольких часов до окна обслуживания — не как решение. Если сервер смотрит в интернет, планируйте обновление в тот же день.
Мера 1. Отключить отслеживание хода загрузки
Это первое, что рекомендуют в официальных уведомлениях: именно этот механизм открывает один из путей атаки.
session.upload_progress.enabled = 0Добавьте строку в php.ini и перезапустите PHP-FPM. Проверить, что применилось:
php -i | grep upload_progress.enabledФункциональность, которая при этом теряется: индикатор прогресса загрузки файлов в некоторых старых CMS. Современные интерфейсы считают прогресс на стороне браузера и не пострадают.
Мера 2. Ограничить размер тела запроса
Атака требует отправить на сервер объёмные данные. Урежьте допустимый размер в PHP и в веб-сервере.
post_max_size = 8M
upload_max_filesize = 8MВ nginx:
client_max_body_size 8m;Подберите значение под свои задачи: если пользователи загружают видео, 8 МБ сломает работу. Ставьте минимум, который нужен сайту.
Мера 3. Правила на периметре
Если перед сайтом стоит Cloudflare или другой экран, включите имеющиеся у провайдера правила против этих уязвимостей — они появились в первые дни после публикации. Это помогает против массовых сканирований, но не против целевой атаки.
Мера 4. Снизить цену взлома
Пока уязвимость открыта, уменьшите то, что злоумышленник получит в случае успеха:
- Отключите опасные функции, если они не нужны:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen. - Запретите запись в каталоги с кодом — выполнение чужого кода не равно возможности его сохранить.
- Проверьте, что пароли баз данных и ключи API не лежат в файлах, доступных из веб-каталога.
Чего делать не стоит
Не полагайтесь на пароль администратора, двухфакторную проверку или ограничение по адресам в самом приложении: атака срабатывает до того, как код приложения получит управление. Скрытие версии PHP в заголовках тоже ничего не даёт — сканируют не по заголовку, а по отклику.
Частые вопросы
Сколько времени дают эти меры?
Ровно столько, сколько нужно, чтобы согласовать окно обслуживания. Они не делают сервер безопасным.
Можно ли просто выключить сайт?
Если сайт не критичен, остановка PHP-FPM — самая надёжная временная мера. Статика при этом продолжит отдаваться.
Как понять, что уже пытались атаковать?
Смотрите журналы на необычные POST-запросы большого объёма и на запросы, завершившиеся кодом 500 в неожиданных местах. Подробности — в нашей статье о признаках взлома после уязвимости.