
Не шутка. Многие еще реально не обновили свои сайты на 1С Битрикс до версии на PHP 8.
Буквально позавчера пришла претензия от клиента, что на сайте некорректно работает каталог, а я за неделю до этого проводил работы по обновлению верстки.
Думаю, блин, вот косячнул, извинился и полез разбираться..
И полный писец! Весь сайт в каталогах типа 45678hj, 5634Gr5 и т.п. и файлах с человеческим названием типа render.php, music.php и т.д. — поймали вирусню.
Что делает этот вирус с сайтом на 1С Битрикс
По факту при анализе кода вируса обнаружил подгрузку аудио и видео файлов, не стал разбираться с каким содержимым.
Сначала хотел откатить бэкап, но версия на хостинге хранит только предыдущий день и не понятно, когда точно проник вирус. Пришлось все чистить вручную. Потратил на это около 4 рабочих часов, пришлось просмотреть почти все папки сайта, включая вложенные и проверить все index.php на предмет вставок. Вирус удалил, после этого сайт заработал в штатном режиме.
Как вирус попадает на сайт (заражает) 1С Битрикс и как от него избавиться
Через дыры в PHP 7, а если точнее через дыры в скриптах 1С Битрикс, работающих с этой версией PHP и ниже. Как избавиться — обновиться.
Обновление 1С Битрикс до версии PHP 8
Лучше сразу обновляться до версии 8.1 и, так как для нее рекомендован MySQL 8-й версии, то и его обновить тоже нужно. Сразу оговорюсь — все это крутиться на виртуальной машине Битрикс, а не на простом хостинге, что делает процесс с одной стороны сильно проще, но по факту оказалось сильно сложнее )
Сложности начались сразу с общения с техподдержкой, когда попытка обновиться через SSH и менюшку Битрикс провалилась (точнее отвалилась с ошибкой). Я не системный администратор и UNIX для меня темный лес, точнее его модули и пакеты. Никогда не хотел с этим работать и разбираться, но судьба часто подкидывает нам те задачи, от которых мы бежим. Вообщем техподдержка ответила, что они не оказывают услуг системного администрирования, это ваш бокс, вы с ним и е..тесь.
Как бороться с ошибками обновления на виртуальной машине Битрикс
Для начала нужно было найти файл с логом ошибок — поиск в Яндексе работает хорошо, ответ пришел быстро, хоть и неочивидный: папка /opt/webdir/temp. Именно в ней хранятся результаты выполнения фоновых заданий виртуальной машины Bitrix.
Ура, причина оказалась в том, что сайт (сервис) с которого тянулись обновления больше не существовал (не резолвился). Эту проблему уже многие решали раньше, мне помог код
sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/CentOS-*.repo
sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/CentOS-*.repo
sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/CentOS-*.repo
После этого обновление пошло, но завершилось снова с ошибкой, уже другой: места не хватило в разделе (At least 32MB more space needed on the /boot filesystem).
И на это нашлось решение:
/etc/yum.conf
installonly_limit=2
Изменил в указанном файле значение с 3 на 2 (это копии пакета kernel).
Далее нужно выполнить команды:
yum remove kernel
yum install kernel
И уже только после этого обновления пошли четенько.
Что дальше делать после смены версии PHP на 8.1
Установить все обновления в marketplace в админке для платформы и решений (начинаем с платформы).
Скорее всего (90%) случаев, что-то на сайте не будет работать, так как некоторые модули не обновились или просто не имеют обновлений или срок подписки у них закончился. Как правило решение ошибок сводится у указанию определения метода, вызвавшего ошибку, что он static. В интернете много информации и даже ранее где-то и я писал по распространенным ошибкам после обновления платформы. Решается все это в течение получаса при наличии FTP доступа к сайту.
Ах да, вирус еще и пароль к базе данных для пользователя bitrix0 поменял на «None», пришлось и его переопределять.
Поэтому, если вы еще не обновились, сделайте это ОБЯЗАТЕЛЬНО!!! А вы не обновились, если у вас при переходе на вкладку Marketplace в админке отображается вот это.

Если кому-то нужна помощь в обновлении 1С Битрикс до версии с поддержкой PHP 8.1 — пишите через форму обратной связи, в телегу или звоните, помогу. Цена зависит от необходимости обновления самой виртуальной машины Bitrix (да и у вас обязательно должен быть root доступ к ней по SSH, ну или хотя бы к хостингу):
5000 — 12000 рублей. Точная сумма в процессе работ определиться.
И еще один важный момент, если у вас Аспро!
Тоже нужно обновить шаблон, а если возможности нет, то внести изменения в 4 файла:
1. Файл /include/mainpage/comp_catalog_ajax.php
$arIncludeParams = ($bAjaxMode ? $_POST["AJAX_PARAMS"] : $arParamsTmp);
$arGlobalFilter = ($bAjaxMode ? unserialize(urldecode($_POST["GLOBAL_FILTER"])) : ($_GET['GLOBAL_FILTER'] ? unserialize(urldecode($_GET['GLOBAL_FILTER'])) : array()));
$arComponentParams = unserialize(urldecode($arIncludeParams));
Заменить на:
if ($_POST["AJAX_PARAMS"] && !is_array(unserialize(urldecode($_POST["AJAX_PARAMS"]), ["allowed_classes" => false]))) {
header('HTTP/1.1 403 Forbidden');
$APPLICATION->SetTitle('Error 403: Forbidden');
echo 'Error 403: Forbidden_1';
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
die();
}
$arIncludeParams = ($bAjaxMode ? $_POST["AJAX_PARAMS"] : $arParamsTmp);
$arGlobalFilter = ($bAjaxMode ? unserialize(urldecode($_POST["GLOBAL_FILTER"]), ["allowed_classes" => false]) : ($_GET['GLOBAL_FILTER'] ? unserialize(urldecode($_GET['GLOBAL_FILTER']), ["allowed_classes" => false]) : array()));
$arComponentParams = unserialize(urldecode($arIncludeParams), ["allowed_classes" => false]);
2. Файлы:
/ajax/show_basket_fly.php
/ajax/show_basket_popup.php
/ajax/reload_basket_fly.php
В этих файлах заменить
$arParams = unserialize(urldecode($_REQUEST["PARAMS"]));
на $arParams = json_decode($_REQUEST["PARAMS"]);
Если эта информация оказалась вам полезной и интересной, то можно поблагодарить автора любой суммой либо по номеру телефона +79807480224 (Сбер, Тинькофф)
Еще больше интересной и полезной информации о SEO, сайтостроении, интернет-маркетинге читайте на моем канале @freelancervit.