Тестовый стенд
Новое Собрали ответы на частые вопросы о работе с системой Открыть раздел →
🍪 Cookie и персональные данные

  Мы используем обязательные cookie для работы сайта и аналитические — для сбора обезличенной статистики. Нажимая «Принять», вы соглашаетесь на аналитику. Выбор «Только необходимые» оставит сайт полностью функциональным.

Подробнее — в политике конфиденциальности и пользовательском соглашении.

🛡️

Безопасность

Восемь слоёв защиты — от сервера до резервной копии. И честный рассказ о том, как мы ответили на PHP2Shell в октябре 2026 года.

Обновлено 08.11.2026 ~12 мин чтения
Безопасность
  • 1PHP-файл, который сервер согласен выполнить, — index.php
  • 1 часмежду сверками файлов с подписанной описью
  • 5попыток входа в минуту — дальше сервер не слушает
  • 4096бит в ключе, которым подписан каждый выпуск

Октябрь 2026

PHP2Shell: что случилось и что мы сделали

В октябре 2026 года в самом PHP нашли две уязвимости — CVE-2026-109618 и CVE-2026-109619. Они позволяли выполнить команды на сервере ещё до того, как запустится код сайта, и закрыть их могло только обновление PHP. По хостингам прошла волна взломов. Типовой след — подброшенный файл вроде public/images/x.php, который сервер послушно выполняет, а владелец замечает через недели.

  1. 22 октября — свой сервер первым. Исправленный пакет PHP пришёл на наш сервер. Проверили сервер — следов взлома нет. Потом выключили session.upload_progress и оставили вход по SSH только по ключу.
  2. Выпуск 3.10.40 — только index.php. Сервер отказывается выполнять любой PHP-файл, кроме index.php. Подброшенный файл остаётся мёртвым грузом.
  3. Там же — PHP в содержимом выключен. Раньше на сайте, обновлённом со старой версии, выполнение PHP-кода из материалов оставалось включённым без ведома владельца. Теперь оно включается только явно.
  4. Выпуск 3.10.41 — сторож целостности. Раз в час файлы сверяются с подписанной описью поставки. Недели, за которые обычно замечают взлом, превращаются в час.
  5. Там же — строка PHP в панели. Сводка безопасности говорит, закрыт ли PHP вашего сервера. Не по номеру версии, а по существу — ниже объясняем, почему это важно.
  6. Проверка боем. На нашем сервере первая сверка заняла 0,3 секунды и расхождений не нашла. Файл, подброшенный для пробы, сторож поймал.

Дверь, о которой владелец не знает, должна быть закрыта с самого начала, а не после первого взлома.

Принцип NEXUM-CORE

Слой 1 · Сервер

Подброшенный файл не запустится

Laravel нужна одна точка входа. Всё остальное, что сервер мог бы выполнить как PHP, он отклоняет сам — до любого кода сайта.

Одна дверь вместо тысячи

Под запретом все расширения, которые PHP способен исполнить: .php с цифрой и без, .phtml, .pht, .phps, .phar. Файл x.php в папке картинок вернёт отказ, а не выполнит команду злоумышленника.

  • Apache, cPanel, LiteSpeed: правило уже лежит в public/.htaccess и работает сразу после установки.
  • nginx: то же правило задаётся в настройках сервера. Так устроен и наш: в PHP уходит только /index.php.
  • Правило сторожит автотест: незаметно потерять его в следующем выпуске нельзя.
Серверная стойка с индикаторами

Слой 2 · PHP

Панель скажет, закрыт ли ваш PHP

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

  • ЗакрытВерсия не ниже исправленной — для ветки 8.5 это 8.5.12.
  • Исправления перенесеныDebian и Ubuntu закрывают уязвимость в своём пакете, не меняя номер: на нашем сервере стоит закрытый PHP 8.5.4. Панель читает журнал пакета и видит это.
  • ОткрытПанель называет уязвимости, версию, до которой обновиться, и что выключить до обновления.
  • НеизвестноНомер ниже исправленного, а журнал пакета прочитать нельзя. Панель просит уточнить у хостинга.
  • Ветка без поддержкиPHP старше 8.2 исправлений безопасности больше не получает. Пора переходить.
  • Без задержекЖурнал пакета весит мегабайт, поэтому перечитывается раз в шесть часов, а сводка открывается мгновенно.

Слой 3 · Приложение

Деньги, формы и загрузки — под замком

Самое дорогое для магазина — не взлом сервера, а тихая покупка за рубль. Поэтому система не верит браузеру там, где это стоит денег.

Цену не подделать

Из браузера берётся только «что» и «сколько штук». Название, цена и наличие перечитываются из базы — правка суммы в инструментах разработчика ничего не даст.

Оплате не верят на слово

Уведомление банка проверяется переспросом платёжной системы или подписью по исходному телу запроса — и всегда сверкой суммы. Способ оплаты, не прошедший живой платёж, включить нельзя.

Последний товар — одному

При оформлении строка товара блокируется: двое покупателей не заберут последний экземпляр одновременно.

Загрузки по белому списку

Разрешено только перечисленное. Тип проверяется по содержимому, а не по имени; SVG запрещён, потому что в него можно вложить скрипт.

Своя каптча

Картинка, пример, вопрос или ползунок — без чужой службы. Ответа нет в разметке, код одноразовый и живёт десять минут.

Заголовки защиты

CSP, HSTS на год при HTTPS, запрет встраивать сайт в чужие страницы, запрет угадывать тип файла, камера, микрофон и геолокация закрыты для страниц.

Слой 4 · Панель и учётные записи

Одного пароля мало

Утёкший пароль — самый частый путь в панель. Поэтому на входе два рубежа, а каждая неудачная попытка остаётся в журнале.

Пароль и код из приложения

  • Двухфакторный вход по стандарту TOTP: подойдёт Яндекс Ключ или любое другое приложение. Код сверяется на вашем сервере, а картинку для привязки рисует сама система.
  • Коды восстановления — одноразовые. Потерянный телефон не означает потерянный доступ.
  • Пять попыток в минуту и на пароле, и на шаге с кодом. Без ограничения шесть цифр подбираются за вечер, с ограничением — никогда.
  • Журнал безопасности: каждая неудачная попытка входа — с адресом. Пароль туда не пишется никогда. По этой строке fail2ban блокирует перебор — у нас так и настроено.
  • История входов в учётной записи: когда и откуда заходили в панель — первое, что нужно, когда возникает вопрос «а это точно был я?».
  • Сводка не льстит: покажет «включена у 1 из 3», если второй фактор есть не у всех администраторов.
Смартфон со значком замка на рабочем столе

Слой 5 · Файлы и целостность

Сторож, который не спит

У каждой поставки есть подписанная опись: какие файлы и с какими суммами мы поставили. Раз в час сторож сверяет с ней то, что лежит на диске.

Как обычно

  • Бот кладёт файл и уходит
  • Владелец узнаёт через недели — от хостинга, поисковика или клиентов
  • Ищет вручную среди тысяч файлов
  • Не понимает, что изменено, а что было всегда

С NEXUM-CORE

  • Раз в час — сверка с описями платформы, каждого модуля, шаблонов и языков
  • Две находки: «изменён» и «посторонний» PHP-файл; в public/ и загрузках PHP не бывает вовсе
  • Сообщение один раз на новый набор находок: журнал безопасности, оповещение и письмо администраторам
  • Свои правки — кнопка «Это мои правки». Запоминается сумма: изменится файл ещё раз — тревога вернётся

Честно о пределе. Злоумышленник с правами сайта может переписать и опись, и самого сторожа. Сторож защищает от массовых ботов, которые кладут файл и уходят, — а именно так и устроены массовые взломы.

Слой 6 · Обновления

Как приезжает выпуск

Канал обновлений — это канал, по которому код попадает сразу на все сайты. Поэтому каждый шаг в нём проверяется.

  1. Подпись. Выпуск подписан RSA-SHA256 ключом 4096 бит. Подпись проверяется до распаковки: чужой архив даже не откроется. Закрытый ключ не хранится ни в репозитории, ни на сервере обновлений.
  2. Совместимость. Видна до нажатия кнопки. Предварительная проверка — версия PHP, расширения, место на диске, права на запись — не даст начать установку, которая оборвётся посередине.
  3. Снимок отката. Перед установкой снимается копия ровно того, что будет тронуто, вместе с библиотеками. Сбой посередине — всё возвращается из снимка.
  4. Ваши правки целы. Обновление сверяет опись и не затирает файлы, которые вы меняли сами.

Выпусков уже десятки. Год обновлений входит в цену лицензии.

Слой 7 · Резервные копии

План Б, который работает сам

  • По расписанию: каждый день или раз в неделю, ночью. Включается в панели в разделе «Резервные копии».
  • Что сохранять: всё целиком, только базу, только файлы или только содержимое.
  • Куда: на Яндекс Диск или в любое S3-совместимое хранилище — облако VK, Yandex Object Storage, своё MinIO в той же сети.
  • Сколько хранить: по умолчанию последние семь копий, старые удаляются сами.
  • Восстановление — из той же панели, без консоли.

Совет. Копия на том же сервере — ещё не копия. Включите выгрузку в облако: если сторож найдёт чужие файлы, первое, что он посоветует, — восстановить копию и сменить пароли.

Слой 8 · Приватность

О визите знаете только вы

Каждый внешний сервис на странице — это ещё один, кто узнаёт о ваших посетителях. На сайте NEXUM-CORE их нет.

Всё своё

Шрифты, значки и скрипты лежат на вашем сервере. Браузер посетителя больше никуда не обращается.

Сначала согласие

Счётчик посещаемости и карта подключаются только с согласия посетителя, а не при открытии страницы.

Без посредников

QR-код второго фактора и каптча рисуются самой системой — никакая служба не видит ни ваших администраторов, ни посетителей.

Автономный режим

Один переключатель — и сервер не выходит в интернет ни по какому поводу, даже если ключи интеграций прописаны.

Для владельца

Чек-лист на пятнадцать минут

Большая часть защиты включена с первого дня. Остальное — несколько шагов, которые может сделать только владелец.

Что сделатьГдеЗачем
Включить второй фактор всем администраторамМоя учётная запись → Двухфакторная проверкаПароль утекает чаще, чем теряется телефон
Довести сводку безопасности до зелёногоГлавная панелиДевять пунктов: отладка, HTTPS, ключ приложения, мастер установки, каптча, второй фактор, PHP, сторож, автономный режим
Проверить cronСервер: * * * * * php artisan schedule:runБез него не работают ни сторож, ни копии по расписанию
Включить копии по расписанию и выгрузку в облакоРезервные копииПо умолчанию расписание выключено — решение за вами
Обновить PHP, если сводка пишет «открыт»Панель хостинга или поддержкаТакие дыры закрывает только обновление самого PHP
Включить каптчу на формахКаптчаФормы без проверки принимают ботов
Не включать PHP в содержимом без нужды.env: CONTENT_PHPКто сможет записать в материал, получит сервер целиком
Ставить выпускиОбновленияИсправления приходят только с ними

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

Вопросы

О безопасности коротко

Защитит ли NEXUM-CORE от любого взлома?

Нет, и никто честно такого не обещает. Мы закрываем типовые пути — подбор пароля, подброшенный файл, подмену цены, чужой скрипт из стороннего сервиса — и даём сторожа, который заметит то, что всё-таки прошло.

У меня хостинг, я не знаю свою версию PHP. Что делать?

Открыть главную страницу панели. Строка «PHP» в сводке безопасности скажет «закрыт», «исправления перенесены» или «открыт» — и в последнем случае назовёт версию, до которой обновиться.

Сторож нашёл файлы. Меня взломали?

Если файлы правили вы — нажмите «Это мои правки», и сторож запомнит их. Если не вы, сайт, вероятно, взломан: восстановите резервную копию и смените пароли. Изменится файл ещё раз — сторож снова сообщит.

У меня в материалах был PHP-код, и он перестал работать. Почему?

С выпуска 3.10.40 выполнение PHP из содержимого выключено по умолчанию: код остаётся в материале текстом. Если он действительно нужен, включите его явно строкой CONTENT_PHP=true в .env — понимая, что запись в материал тогда равна доступу к серверу.

Обновление не затрёт мои правки в файлах?

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

Исправления безопасности платные?

Год обновлений входит в цену лицензии. Дальше продление — 6 900 ₽ в год, по желанию. Без продления сайт работает бессрочно, но новые выпуски, в том числе с исправлениями, перестают приходить.

Куда уходят данные моих посетителей?

Никуда. Шрифты, значки и скрипты лежат на вашем сервере, счётчик и карта — только с согласия посетителя, а автономный режим запрещает серверу любые исходящие запросы.

Можно проверить всё это самому?

Да. Исходники открыты, без шифрования. Любое утверждение с этой страницы покажем в коде — вместе с автотестом, который его сторожит.

Проверьте сами

Задайте вопрос о безопасности — покажем, как устроен нужный вам слой, прямо в коде.

Задать вопросС чего начать

На главную
Поделиться:
Остались вопросы? Ответим в течение рабочего дня — напишите нам удобным способом.
Написать нам