До основного вмісту

PHP2Shell: що робити, якщо оновитися просто зараз не можна

Безпека · 27.10.2026 · 2 хв читання

Спершу чесно

Тимчасові заходи звужують поверхню атаки, але не закривають вразливість. Вони годяться як виграш кількох годин до вікна обслуговування — не як рішення. Якщо сервер дивиться в інтернет, плануйте оновлення того самого дня.

Захід 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 у несподіваних місцях. Подробиці — в нашій статті про ознаки зламу після вразливості.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці