Сайт на PHP 7 или 5 после PHP2Shell: латать, переезжать или переписывать
PHP2Shell затрагивает почти все версии PHP начиная с 5.4. Официальные релизы с исправлениями вышли только для поддерживаемых веток 8.2–8.5. Для 7.4, 8.0 и 8.1 команда PHP подготовила исправления исходного кода, но готовых версий не выпускала: их собирают дистрибутивы и коммерческие поставщики. А для 7.3 и всего, что старше, исправлений нет вовсе.
Если ваш сайт написан лет семь-десять назад и до сих пор работает на PHP 5.6 или 7.x, этот выпуск касается вас больше всех. Ниже — реальные варианты и цена каждого.
Какая у вас ситуация
| Версия PHP | Исправление PHP2Shell | Что это значит |
|---|---|---|
| 8.2–8.5 | Официальные релизы 8.2.35, 8.3.36, 8.4.27, 8.5.12 | Обновиться внутри своей ветки — обычно без изменений кода |
| 8.1 | Бэкпорты дистрибутивов (Ubuntu 22.04, RHEL/Alma, cPanel) | Можно закрыть сейчас, но ветка давно вне поддержки — планируйте переход |
| 7.4, 8.0 | Только у дистрибутивов и поставщиков, которые ещё собирают эти ветки | Зависит от хостинга. Многие площадки исправлений не выпустят |
| 5.4–7.3 | Нет | Уязвимость останется навсегда. Нужен переход на новую версию или изоляция |
Вариант 1. Бэкпорт от поставщика
Некоторые поставщики продолжают выпускать исправления для старых веток: сборки alt-php в CloudLinux, ea-php в cPanel, пакеты RHEL и AlmaLinux. Если ваш хостинг их использует, исправление может прийти «само», без смены версии PHP. Это самый быстрый путь, но он только откладывает проблему: следующая уязвимость может не получить бэкпорта.
Вариант 2. Обновление PHP с адаптацией кода
Чаще всего старый сайт не запускается на PHP 8 «как есть»: изменились функции работы с базой, строгость типов, поведение ошибок, устарели библиотеки. Но объём работы почти всегда меньше, чем кажется. Типичная картина — несколько десятков мест в коде и пара библиотек, которые нужно заменить.
| Переход | Типичный объём | Ориентир по сроку |
|---|---|---|
| 7.4 → 8.3 | Предупреждения о типах, устаревшие функции, обновление зависимостей | 1–2 недели |
| 7.0–7.3 → 8.3 | То же плюс замена библиотек, проверка шаблонов | 2–4 недели |
| 5.6 → 8.3 | Работа с базой данных (mysql_*), шифрование, кодировки, сторонние модули | 3–6 недель или поэтапно |
Мы делаем это как отдельную услугу — обновление PHP с проверкой совместимости, от 24 000 ₽, обычно 2–4 недели. Сайт продолжает работать на старой версии, пока новая проверяется на копии: формы, корзина, оплата, обмен с 1С, фоновые задачи. Переключение — одной операцией, с возможностью быстро откатиться.
Вариант 3. Изоляция на время перехода
Пока идёт обновление, старый сайт можно спрятать за защитным слоем. Это не исправляет уязвимость, но заметно сужает круг атакующих:
- Ограничить размер запросов и загрузку файлов на nginx или CDN, закрыть multipart там, где загрузки не нужны.
- Вынести админку и служебные разделы под доступ по IP или VPN.
- Отключить
session.upload_progressи, если позволяет нагрузка, перезапускать FPM-процесс после каждого запроса (pm.max_requests = 1). - Убрать с сервера всё лишнее: старые копии сайта, phpMyAdmin, архивы и тестовые поддомены.
- Хранить секреты отдельно и регулярно их менять, раз полностью исключить утечку памяти не получится.
Вариант 4. Переезд или новая версия сайта
Если сервер работает на системе, которая сама давно не обновляется (например, CentOS 7 или Ubuntu 16.04), латать один PHP бессмысленно: рядом окажутся такие же старые OpenSSL, ядро и почтовый сервер. Тогда правильнее перенести сайт на актуальный сервер с поддерживаемым PHP. А если сайт морально устарел целиком и каждая доработка дорожает, стоит посчитать новую разработку: иногда она окупается быстрее, чем кажется, за счёт скорости, конверсии и стоимости сопровождения.
Как выбрать
- Ветка 8.1 и есть бэкпорт — закройте уязвимость сейчас и запланируйте переход на 8.3 в ближайшие месяцы.
- 7.4 или 8.0, хостинг выпускает исправления — ставьте их и сразу начинайте обновление PHP: следующий раз может не повезти.
- 7.3 и старше — нужна изоляция сегодня и обновление PHP в ближайшие недели. Это не та ситуация, которую можно отложить до следующего квартала.
- Старая ОС на сервере — переезд, а не точечные исправления.
Если непонятно, к какому варианту относится ваш проект, пришлите адрес сайта через контакты. Определим версию PHP и окружение, оценим объём работ и предложим план: что закрыть сегодня, а что сделать в следующие недели. Если всё нужно срочно, начнём с скорой помощи — изоляции и временной защиты — от 4 900 ₽.
Источники
Вопросы и ответы
Есть ли исправление PHP2Shell для PHP 7.4?
Официального релиза нет. Команда PHP подготовила исправления исходного кода для 7.4, 8.0 и 8.1, а готовые сборки выпускают отдельные дистрибутивы и поставщики, например CloudLinux или cPanel. Уточните у своего хостинга.
Сколько стоит перевести сайт на новый PHP?
Наша услуга обновления PHP стоит от 24 000 ₽ и обычно занимает 2–4 недели. Переход с PHP 5.6 бывает дольше: многое зависит от того, как написана работа с базой данных.
Можно ли просто переключить версию PHP в панели хостинга?
Технически да, но старый код может перестать работать: появятся ошибки, пропадут формы или оплата. Безопаснее проверить новую версию на копии сайта и переключаться после проверки.
Что делать сегодня, если обновление займёт недели?
Изолировать сайт: ограничить запросы и загрузку файлов, закрыть админку по IP, отключить лишние функции PHP, убрать с сервера старые копии и сменить пароли.