Уязвимость в PHP: как проверить свой сайт и что делать, если его нельзя просто обновить

11 мин чтения
Содержание

Коротко: в 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, а если это невозможно, ограничить доступ к сайтам вплоть до полного отключения.

90,8%
сайтов Рунета на PHP
9,2 из 10
оценка опасности
21 октября
вышли исправления
миллионы
опыток атак за первые сутки.

Чем это опасно для обычной компании

Можно подумать, что хакеров интересуют только банки и министерства. Но массовые атаки работают иначе: роботы перебирают все сайты подряд и ищут уязвимую версию PHP. Им всё равно, чей это сайт - автосервиса, стоматологии или завода.

Что может произойти со взломанным сайтом:

  • Утечка данных клиентов. Заявки, телефоны, адреса, данные из личных кабинетов. А за утечку персональных данных в России отвечает владелец сайта, и штрафы за это ощутимые.

  • Подмена страниц. На вашем сайте появляется фишинговая форма оплаты или ссылки на мошеннические ресурсы. Клиенты теряют деньги, вы - репутацию.

  • Вирусы и спам. Сервер начинает рассылать спам или атаковать другие сайты, хостинг блокирует аккаунт, а Яндекс помечает сайт как опасный и убирает из поиска.

  • Потеря сайта целиком. Если нет свежей резервной копии, восстанавливать придётся с нуля.

Важно: обновление WordPress, Битрикса или другой CMS проблему не решает. Уязвим сам PHP, а не движок. Обновлять нужно именно версию PHP на сервере.

Обязательно проверьте версию php на своем сайте

Как за 5 минут проверить свой сайт

Узнайте, на какой версии PHP работает сайт. Есть три простых способа:

  1. Панель хостинга. В Beget, Timeweb, REG.RU и у других хостеров версия PHP указана в настройках сайта, обычно в разделе «Сайты» или «PHP».

  2. Админка сайта. В WordPress: Инструменты → Здоровье сайта → Информация → Сервер. В 1С-Битрикс: Настройки → Инструменты → Проверка системы. В MODX: Отчёты → Информация о системе. В других CMS ищите раздел с информацией о системе или сервере.

  3. Спросите хостинг или своего разработчика. Одна фраза в поддержку: «Какая версия 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.

  • Отключённые обновления. Нередко разработчик когда-то отключил обновления, «чтобы ничего не сломалось». С тех пор сайт годами живёт на старых версиях всего.

Что сделать:

  1. Посмотрите версию PHP в «Здоровье сайта». Там же WordPress сам подсвечивает устаревшие компоненты.

  2. Сделайте резервную копию, обновите WordPress, тему и плагины.

  3. Удалите плагины, которые не используете, и замените те, что не обновлялись больше года.

  4. Только после этого переключайте PHP на новую версию и проверяйте все формы, корзину и ключевые страницы.

Если после переключения появляется белый экран или ошибки, верните старую версию PHP в панели хостинга и передайте сайт разработчику: дальше нужна правка кода.

Если у вас сайт на 1С-Битрикс

С Битриксом ситуация сложнее, и на это есть три причины.

  • Лицензия. Обновления платформы приходят, только пока лицензия продлена. Сайт с истёкшей лицензией продолжает работать, но ядро не обновляется годами. А старые версии ядра на PHP 8 просто не запускаются: сначала нужно продлить лицензию и обновить сам Битрикс, и только потом PHP.

  • Свой сервер. Сайты на Битриксе часто живут не на обычном хостинге, а на отдельном сервере (VPS) с «Веб-окружением Битрикс». Там PHP за вас никто не обновит: это задача вашего администратора или разработчика.

  • Доработки. Битрикс почти всегда дорабатывают под бизнес: свои шаблоны компонентов, обмен с 1С, интеграции с CRM и службами доставки. Чем больше доработок и чем они старше, тем выше шанс, что что-то сломается при переходе на новый PHP. Особенно если кто-то когда-то правил файлы ядра напрямую.

Что сделать:

  1. Откройте «Проверку системы» в админке: там видно версию PHP и проблемы окружения.

  2. Проверьте, до какого числа действует лицензия, в разделе обновлений платформы.

  3. Если сайт на своём сервере, уточните у администратора, кто и когда обновит PHP.

  4. Если лицензия истекла давно, а ядро старое, обновление нужно планировать как проект: продление лицензии, обновление ядра, проверка доработок и обмена с 1С на тестовой копии, и только потом перенос на рабочий сайт.

Для интернет-магазина на Битриксе это особенно важно: в базе лежат данные покупателей и заказов, и утечка ударит и по клиентам, и по вам.

Что делать прямо сейчас: план на 3 дня

  1. 01

    Защититься

    День 1

    Узнайте версию PHP (см. выше). Сделайте полную резервную копию сайта и базы данных и сохраните её не на том же сервере. Если версия 8.2 или новее - обновите PHP или попросите хостинг сделать это.

  2. 02

    Проверить, не взломали ли уже

    День 2

    Попросите хостинг или разработчика проверить сервер антивирусом и посмотреть журналы на подозрительные запросы. Смените пароли от админки, хостинга, базы данных и FTP. Проверьте, не появилось ли на сайте незнакомых страниц, файлов или пользователей с правами администратора.

  3. 03

    Решить, что делать со старым сайтом

    День 3

    Если PHP 8.1 или старше, оцените, сколько работы нужно, чтобы перевести сайт на актуальную версию. Если обновление займёт время, а на сайте есть личные кабинеты, оплата или данные клиентов, подумайте о временных мерах: закрыть административную часть по IP, отключить лишние формы, поставить защиту от атак (WAF) на стороне хостинга.

Обновить или переделать?

Это главный вопрос для владельцев старых сайтов. Ориентир такой:

  • Обновление кода. Если сайт в целом устраивает - дизайн актуален, заявки идут - разработчик переводит его на свежую версию PHP и CMS, заменяет устаревшие плагины и исправляет то, что ломается. Сайт выглядит так же, но работает на защищённой основе.

  • Переезд на новую платформу. Если движок давно не поддерживается, а код проще переписать, чем чинить, выгоднее перенести сайт на современную CMS или фреймворк. Адреса страниц и позиции в поиске при этом сохраняются.

  • Новый сайт. Если сайт устарел и технически, и визуально, а заявок с него мало, вкладывать в него деньги нет смысла. Лучше сделать новый и сразу закрыть все проблемы - и с безопасностью, и с продажами.

Что мы сделали для своих клиентов

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

Именно для этого и нужна поддержка сайта: когда случается такая история, вы узнаёте о ней из новостей, а не из письма хостинга о блокировке.

Главный вывод

Эта история не о том, что PHP плохой. На нём работает большая часть интернета, и современные версии надёжны. Проблема в другом: сайт - это не разовая покупка. Его нужно обновлять так же, как телефон или компьютер. Сайт, который пять лет никто не трогал, - это не «работает и ладно», а риск, который однажды сработает.

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

Проверим ваш сайт бесплатно

Пришлите ссылку на сайт через форму ниже. Мы бесплатно проверим, на какой версии PHP и CMS он работает, есть ли явные признаки взлома, и скажем, что нужно сделать: обновить версию, доработать код или переносить сайт. Если работы нужны срочно, возьмём в приоритет.

Часто задаваемые вопросы