Определение CMS, версии и актуальные версии
Содержание
Сервис определяет, на чём работает сайт, узнаёт конкретные версии и сравнивает их со справочником последних версий. Для своих сайтов (с подтверждённым владением) отчёт добавляет рекомендации по обновлению. Справочник открыт всем на странице /tools/aktualnye-versii.
Какие системы определяются
Cms\Detector распознаёт больше 130 систем: массовые (WordPress, Joomla, Drupal, 1С-Битрикс, MODX, DLE, OpenCart, PrestaShop, Magento, TYPO3), российские (HostCMS, UMI.CMS, NetCat, Amiro, Diafan, ImageCMS, InstantCMS, LiveStreet, Webasyst, AdvantShop, Okay CMS), редкие и корпоративные (Umbraco, Concrete CMS, Pimcore, Sitecore, Adobe Experience Manager, Liferay, DNN, Kentico, Sitefinity, Contao, SilverStripe, Craft, Statamic, Kirby, Grav, October, ProcessWire, Strapi, Directus), форумы и вики (Discourse, Flarum, NodeBB, XenForo, vBulletin, MyBB, SMF, DokuWiki, MediaWiki, Confluence), магазины (nopCommerce, Sylius, Shopware, Shopify, Salesforce Commerce Cloud, SAP Commerce, Zen Cart, osCommerce), конструкторы (Tilda, Wix, Flexbe, GetCourse, Craftum, uKit, Nubex, Framer) и генераторы статических сайтов (Hugo, Jekyll, Hexo, Gatsby, Astro, Eleventy, MkDocs, Docusaurus).
Каждый признак даёт баллы: meta generator, заголовки ответа, cookies, адреса файлов и HTML, robots.txt, страница 404. Побеждает система с наибольшей суммой, уверенность показывается как «уверенно», «вероятно» или «возможно». Если признаков мало, выполняются безопасные запросы к типовым адресам входа (до шести, а если ничего не найдено — до десяти: /wp-login.php, /bitrix/admin/, /umbraco/, /typo3/, /ghost/ и другие).
Как определяются версии
- Из страницы: meta generator, заголовки (
X-Generator,X-Umbraco-Version,Liferay-Portal), параметр?ver=или?v=у файлов ядра (WordPress, Drupal). - Из служебных файлов (до трёх запросов и только если версия не найдена): WordPress —
/feed/,/readme.html,/wp-links-opml.php; Joomla —joomla.xmlи языковой файл; Drupal —CHANGELOG.txt; Magento —/magento_version; MediaWiki —api.php; Nextcloud —status.php. - Из баннеров библиотек: если файл jQuery, Bootstrap, Vue, Swiper и других подключён без номера версии в адресе, читаются первые 4 КБ файла (не больше пяти файлов за проверку).
- Плагины и темы WordPress: по адресам
/wp-content/plugins/<имя>/и версии в?ver=. Если версия совпадает с версией самого WordPress, она считается неизвестной. Последнюю версию даёт каталог wordpress.org (кэш на сутки); платные и самописные плагины там не найдены, для них статус «нет данных».
Что определить нельзя: у 1С-Битрикс, DLE, PrestaShop, OpenCart и ряда других версия на публичных страницах не раскрывается, и сервис честно покажет систему без версии. Если хостер скрыл версии серверного ПО, сравнивать нечего.
Справочник последних версий
Вкладки: CMS и магазины, Фреймворки, Библиотеки, Серверное ПО (около 170 продуктов). Для каждого продукта показаны последняя версия, дата выхода, поддерживаемые ветки со сроками и список веток, снятых с поддержки. Есть поиск и проверка своей версии: выберите продукт, введите номер и получите статус с рекомендацией.
Источники по порядку, первый успешный побеждает:
- endoflife.date — ветки, сроки поддержки и последняя версия каждой;
- npm — для JavaScript-библиотек;
- GitHub — последний релиз, а если релизов нет — самый новый стабильный тег (токен в настройках поднимает лимит с 60 до 5000 запросов в час);
- api.wordpress.org — запасной источник для ядра WordPress;
- страница версий производителя — для 1С-Битрикс (версия главного модуля) и HostCMS.
Для продуктов без открытого источника (DLE, UMI.CMS) версию задаёт администратор вручную: оно действует, пока автоматический источник не вернёт более новую.
Обновление раз в сутки: cron php bin/versionsync.php (см. deploy/crontab.example, ключ --force обновляет всё принудительно). Если cron не настроен, справочник обновляется сам при открытии страницы или анализа сайта (не дольше 10–25 секунд). При сбое источника прежние данные остаются, ошибка видна в админке; неудачные запросы повторяются раз в час.
Статусы и рекомендации
| Статус | Что значит |
|---|---|
| актуальная | стоит последняя версия |
| есть обновление | в той же серии вышла более новая |
| нужно обновить в своей ветке | в вашей ветке вышел выпуск с исправлениями |
| есть новая ветка | ветка ещё поддерживается, но вышла новая крупная версия |
| сильно отстаёт | версия отстаёт на крупную версию |
| снята с поддержки | ветка больше не получает исправлений безопасности |
| очень старая | версии нет в списке поддерживаемых веток |
| известна только крупная версия | точный номер скрыт, оценивается только поддержка ветки |
Статусы видны всем в блоке «Версии и обновления» отчёта о сайте. Шаги по обновлению (резервная копия, порядок действий для WordPress, Joomla, Drupal, Битрикс, MODX, OpenCart, PrestaShop, Magento, TYPO3 и других, ссылка на загрузку) видит только владелец: подтверждённый домен (см. docs/OWNERSHIP) или администратор. Для серверного ПО на Linux сервис напоминает, что дистрибутивы переносят исправления в старые номера версий, поэтому старый номер не всегда означает уязвимость.
Админка
/admin/versions (только владелец сервиса): включение справочника, свежесть данных, токен GitHub, переключатели рекомендаций и проверки плагинов, список источников с ошибками, ручные значения по каждому продукту, кнопки «Обновить всё сейчас» и «обновить один продукт».
Что важно знать
- Версия определяется по тому, что видно снаружи. Её можно скрыть или подменить; «сильно устарела» означает «версия, которую показывает сайт».
- Справочник отражает данные источников на момент обновления. Страницы производителей (Битрикс, HostCMS) читаются по шаблону и могут перестать совпадать после смены вёрстки: тогда в админке появится ошибка, а значение можно задать вручную.
- Версии плагинов WordPress берутся из ссылок на файлы и иногда отличаются от установленных.
- Запросы идут через исходящие прокси по правилам назначения «сайты» (
docs/PROXY.md).