Уязвимость в PHP: как проверить свой сайт и что делать, если его нельзя просто обновить
Содержание
Коротко: в PHP, на котором работает около 91% русскоязычных сайтов, нашли две критические уязвимости под общим названием PHP2Shell. Через них злоумышленник может удалённо захватить сервер и вытащить пароли и данные. Исправления вышли 21 октября только для версий PHP 8.2, 8.3, 8.4 и 8.5. Если ваш сайт работает на одной из них, его нужно срочно обновить до исправленной версии. Если на PHP 8.1 или старше, исправления для вас нет вообще: сайт придётся переводить на новую версию PHP, а для этого обычно нужно обновить его код.
Что случилось
PHP - язык программирования, на котором работают WordPress, 1С-Битрикс, Joomla, Drupal, MODX и большинство самописных сайтов. По данным W3Techs, на нём работают 90,8% сайтов на русском языке и около 69% всех сайтов в мире.
В октябре стало известно о двух критических уязвимостях в самом PHP. Их нашли исследователи по кибербезопасности с помощью искусственного интеллекта, причём ошибки, по данным Би-би-си, оставались незамеченными больше десяти лет. Опасность оценили в 9,2 балла из 10.
21 октября разработчики PHP выпустили экстренные обновления и призвали всех обновиться немедленно. В тот же день в Cloudflare сообщили о первых атаках, а к ночи - о миллионах попыток использовать уязвимости.
Реакция по всему миру была жёсткой. Финляндия и Чехия временно закрыли государственные сервисы, свои сайты отключили МИД Бельгии, Минфин Японии, порт Роттердама, часть больниц Нидерландов. В России 22 октября Национальный координационный центр по компьютерным инцидентам (НКЦКИ) при ФСБ направил письмо организациям критической инфраструктуры - госорганам, банкам, больницам, энергетике и транспорту. Им предписано срочно обновить PHP, а если это невозможно, ограничить доступ к сайтам вплоть до полного отключения.
Чем это опасно для обычной компании
Можно подумать, что хакеров интересуют только банки и министерства. Но массовые атаки работают иначе: роботы перебирают все сайты подряд и ищут уязвимую версию PHP. Им всё равно, чей это сайт - автосервиса, стоматологии или завода.
Что может произойти со взломанным сайтом:
Утечка данных клиентов. Заявки, телефоны, адреса, данные из личных кабинетов. А за утечку персональных данных в России отвечает владелец сайта, и штрафы за это ощутимые.
Подмена страниц. На вашем сайте появляется фишинговая форма оплаты или ссылки на мошеннические ресурсы. Клиенты теряют деньги, вы - репутацию.
Вирусы и спам. Сервер начинает рассылать спам или атаковать другие сайты, хостинг блокирует аккаунт, а Яндекс помечает сайт как опасный и убирает из поиска.
Потеря сайта целиком. Если нет свежей резервной копии, восстанавливать придётся с нуля.
Важно: обновление WordPress, Битрикса или другой CMS проблему не решает. Уязвим сам PHP, а не движок. Обновлять нужно именно версию PHP на сервере.
Как за 5 минут проверить свой сайт
Узнайте, на какой версии PHP работает сайт. Есть три простых способа:
Панель хостинга. В Beget, Timeweb, REG.RU и у других хостеров версия PHP указана в настройках сайта, обычно в разделе «Сайты» или «PHP».
Админка сайта. В WordPress: Инструменты → Здоровье сайта → Информация → Сервер. В 1С-Битрикс: Настройки → Инструменты → Проверка системы. В MODX: Отчёты → Информация о системе. В других CMS ищите раздел с информацией о системе или сервере.
Спросите хостинг или своего разработчика. Одна фраза в поддержку: «Какая версия PHP стоит на моём сайте и обновлена ли она после 21 октября?»
Ваша версия PHP | Что это значит | Что делать |
|---|---|---|
8.5, 8.4, 8.3, 8.2 | Исправление есть | Обновить до 8.5.12, 8.4.27, 8.3.36 или 8.2.35 соответственно. Часто это делает хостинг, но проверьте сами |
8.1, 8.0 | Поддержка закончилась, исправления нет | Переводить сайт на PHP 8.2 или новее. Скорее всего, понадобится доработка кода |
7.x и старше | Сильно устаревшая версия, исправления нет | Почти наверняка нужна серьёзная доработка или перенос сайта на новую платформу |
Почему нельзя просто «нажать кнопку обновить»
Если сайт работает на PHP 8.2 и новее, обновление обычно проходит безболезненно: это исправление внутри той же версии.
Сложности начинаются, когда сайт сделан давно. Между PHP 7 и PHP 8 многое изменилось, и старый код на новой версии часто просто ломается: белый экран, ошибки, перестают работать формы заявок, корзина или каталог. Особенно это касается:
сайтов старше 5-7 лет, которые с тех пор не обновлялись;
WordPress с десятками плагинов, часть из которых давно заброшена авторами;
старых версий 1С-Битрикс, Joomla, MODX Evolution и других движков;
самописных сайтов, разработчик которых давно не на связи.
Поэтому многие такие сайты годами сидят на старом PHP: «работает - и не трогаем». До этой недели это был риск, о котором можно было не думать. Теперь это открытая дверь, о которой знают все.
Если у вас сайт на WordPress
WordPress - самая популярная CMS в мире, поэтому сайты на нём роботы-взломщики проверяют первыми.
Сам WordPress свежих версий нормально работает на PHP 8.2 и новее. Проблема почти всегда не в нём, а в том, что вокруг:
Старая тема. Многие сайты сделаны на купленном когда-то шаблоне со встроенным конструктором страниц. Если автор темы её больше не обновляет, на новом PHP она может развалиться.
Заброшенные плагины. На типичном сайте 20-40 плагинов: формы, слайдеры, SEO, кэш, галереи. Часть из них авторы давно забросили, некоторые удалены из официального каталога. Такие плагины - вторая по популярности дыра после самого PHP.
Отключённые обновления. Нередко разработчик когда-то отключил обновления, «чтобы ничего не сломалось». С тех пор сайт годами живёт на старых версиях всего.
Что сделать:
Посмотрите версию PHP в «Здоровье сайта». Там же WordPress сам подсвечивает устаревшие компоненты.
Сделайте резервную копию, обновите WordPress, тему и плагины.
Удалите плагины, которые не используете, и замените те, что не обновлялись больше года.
Только после этого переключайте PHP на новую версию и проверяйте все формы, корзину и ключевые страницы.
Если после переключения появляется белый экран или ошибки, верните старую версию PHP в панели хостинга и передайте сайт разработчику: дальше нужна правка кода.
Если у вас сайт на 1С-Битрикс
С Битриксом ситуация сложнее, и на это есть три причины.
Лицензия. Обновления платформы приходят, только пока лицензия продлена. Сайт с истёкшей лицензией продолжает работать, но ядро не обновляется годами. А старые версии ядра на PHP 8 просто не запускаются: сначала нужно продлить лицензию и обновить сам Битрикс, и только потом PHP.
Свой сервер. Сайты на Битриксе часто живут не на обычном хостинге, а на отдельном сервере (VPS) с «Веб-окружением Битрикс». Там PHP за вас никто не обновит: это задача вашего администратора или разработчика.
Доработки. Битрикс почти всегда дорабатывают под бизнес: свои шаблоны компонентов, обмен с 1С, интеграции с CRM и службами доставки. Чем больше доработок и чем они старше, тем выше шанс, что что-то сломается при переходе на новый PHP. Особенно если кто-то когда-то правил файлы ядра напрямую.
Что сделать:
Откройте «Проверку системы» в админке: там видно версию PHP и проблемы окружения.
Проверьте, до какого числа действует лицензия, в разделе обновлений платформы.
Если сайт на своём сервере, уточните у администратора, кто и когда обновит PHP.
Если лицензия истекла давно, а ядро старое, обновление нужно планировать как проект: продление лицензии, обновление ядра, проверка доработок и обмена с 1С на тестовой копии, и только потом перенос на рабочий сайт.
Для интернет-магазина на Битриксе это особенно важно: в базе лежат данные покупателей и заказов, и утечка ударит и по клиентам, и по вам.
Что делать прямо сейчас: план на 3 дня
- 01
Защититься
День 1Узнайте версию PHP (см. выше). Сделайте полную резервную копию сайта и базы данных и сохраните её не на том же сервере. Если версия 8.2 или новее - обновите PHP или попросите хостинг сделать это.
- 02
Проверить, не взломали ли уже
День 2Попросите хостинг или разработчика проверить сервер антивирусом и посмотреть журналы на подозрительные запросы. Смените пароли от админки, хостинга, базы данных и FTP. Проверьте, не появилось ли на сайте незнакомых страниц, файлов или пользователей с правами администратора.
- 03
Решить, что делать со старым сайтом
День 3Если PHP 8.1 или старше, оцените, сколько работы нужно, чтобы перевести сайт на актуальную версию. Если обновление займёт время, а на сайте есть личные кабинеты, оплата или данные клиентов, подумайте о временных мерах: закрыть административную часть по IP, отключить лишние формы, поставить защиту от атак (WAF) на стороне хостинга.
Обновить или переделать?
Это главный вопрос для владельцев старых сайтов. Ориентир такой:
Обновление кода. Если сайт в целом устраивает - дизайн актуален, заявки идут - разработчик переводит его на свежую версию PHP и CMS, заменяет устаревшие плагины и исправляет то, что ломается. Сайт выглядит так же, но работает на защищённой основе.
Переезд на новую платформу. Если движок давно не поддерживается, а код проще переписать, чем чинить, выгоднее перенести сайт на современную CMS или фреймворк. Адреса страниц и позиции в поиске при этом сохраняются.
Новый сайт. Если сайт устарел и технически, и визуально, а заявок с него мало, вкладывать в него деньги нет смысла. Лучше сделать новый и сразу закрыть все проблемы - и с безопасностью, и с продажами.
Что мы сделали для своих клиентов
Все сайты клиентов на нашей поддержке мы обновили сразу после выхода исправлений: перевели на защищённые версии PHP, сделали резервные копии и проверили серверы на следы взлома. Владельцам этих сайтов ничего не пришлось делать и даже разбираться, что такое PHP2Shell.
Именно для этого и нужна поддержка сайта: когда случается такая история, вы узнаёте о ней из новостей, а не из письма хостинга о блокировке.
Главный вывод
Эта история не о том, что PHP плохой. На нём работает большая часть интернета, и современные версии надёжны. Проблема в другом: сайт - это не разовая покупка. Его нужно обновлять так же, как телефон или компьютер. Сайт, который пять лет никто не трогал, - это не «работает и ладно», а риск, который однажды сработает.
Такие уязвимости будут находить всё чаще: искусственный интеллект ищет ошибки в коде быстрее людей - и защитники, и злоумышленники. Выиграют те, у кого сайт можно обновить за час, а не за месяц.
Проверим ваш сайт бесплатно
Пришлите ссылку на сайт через форму ниже. Мы бесплатно проверим, на какой версии PHP и CMS он работает, есть ли явные признаки взлома, и скажем, что нужно сделать: обновить версию, доработать код или переносить сайт. Если работы нужны срочно, возьмём в приоритет.