Wordpress - sucuri-scanner - антивирусный плагин - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

Published: 2026-08-18


Введение

Sucuri Security (slug плагина — sucuri-scanner, в обиходе — Sucuri Scanner) — бесплатный антивирусный и защитный плагин для WordPress, разрабатываемый компанией Sucuri Inc., которая в настоящее время входит в структуру GoDaddy. Официальное название на каталоге WordPress.org — «Sucuri Security — Auditing, Malware Scanner and Security Hardening». Плагин позиционируется как комплексный инструмент безопасности: система аудита событий, сканер вредоносного кода, средство контроля целостности файлов и набор инструментов для усиления защиты (hardening) сайта.

По состоянию на август 2026 года плагин установлен более чем на 600 000 сайтов, имеет рейтинг 4,2 из 5 звёзд на основании 384 отзывов и занимает место в сотне самых популярных плагинов каталога. Текущая стабильная версия в каталоге WordPress.org — 2.7.4 (выпущена 7 июля 2026 года), тогда как в официальном репозитории на GitHub ветка main уже содержит версию 2.7.5, которая добавляет одноразовые бэкап-коды для двухфакторной аутентификации, поиск и фильтры в журнале аудита, а также экспорт полного журнала аудита в формат CSV.

Плагин распространяется по лицензии GPL v2, требует WordPress не ниже 6.0 и PHP не ниже 7.4, протестирован до WordPress 7.0. Важной особенностью является то, что премиальные функции (сканирование уязвимостей ядра, PHP, плагинов и тем, тёмная тема интерфейса) не требуют отдельной установки — они разблокируются при вводе ключа API облачного сервиса Sucuri Firewall (WAF).

История и версии

Плагин впервые появился в каталоге WordPress.org 18 ноября 2011 года и с тех пор прошёл несколько крупных этапов развития:

  • 1.1 – 1.5 (2011–2013) — первые публичные релизы: скан сайта, «однокликовое усиление защиты» (1-click hardening), проверка целостности WordPress, журнал последних входов, поддержка IPv6.
  • 1.6 (2014) — новая панель управления, интеграция с удалённым сканером SiteCheck, раздел «Системная информация».
  • 1.7 (2015–2016) — значительная работа над аудитом: журнал событий, обработка неудачных входов, отчёты о brute-force атаках, API-сервис для отправки логов, режим обратного прокси, очереди логов.
  • 1.8 (2017–2021) — самый крупный этап: полная переработка интерфейса (1.8.4), перенос хранения настроек из базы данных в файл (1.7.18/1.8.2), международная локализация, поддержка PHP 8 (1.8.27), смена владельца на GoDaddy (1.8.29), удаление зависимости от API wordpress.sucuri.net (1.8.37), автоматическое обновление секретных ключей (1.8.23), WordPress Security Recommendations (1.8.21–1.8.22).
  • 1.9 (2022) — настройка заголовков Cache-Control (1.9.1), CSP (1.9.7), CORS (1.9.8), фильтры в журнале аудита (1.9.6).
  • 2.0 – 2.4 (2023–2024) — сканеры уязвимостей ядра WordPress, PHP, плагинов и тем; тёмная тема; предупреждение о несовпадении домена WAF.
  • 2.5 (2024) — встроенная двухфакторная аутентификация (TOTP) с QR-кодами.
  • 2.6 – 2.7 (2025) — новая библиотека прав, новое шифрование ключа WAF (AES-256-GCM), исправления по результатам проверки Plugin Check (PCP), явная карта AJAX-диспетчера.
  • 2.7.1 – 2.7.4 (2025–2026) — исправления шифрования, пагинация страницы 2FA для сайтов с тысячами пользователей, поиск пользователей, одно-кликовое отключение XML-RPC, исправление фатальной ошибки PHP 8, маскировка ключей в журнале аудита.
  • 2.7.5 (в разработке, GitHub main) — одноразовые бэкап-коды 2FA, поиск/фильтры/CSV-экспорт журнала аудита, исправление пустого журнала аудита на неанглийских сайтах.

Из истории также следует отметить, что в версии 1.8.37 разработчики прекратили использование публичного API wordpress.sucuri.net — сервис был отключён. Теперь для работы облачного аудита владелец сайта должен самостоятельно определить константу

SUCURISCAN_API_URL

в файле wp-config.php. Это одна из ключевых особенностей современных версий: из коробки плагин работает полностью локально.

Установка и требования

Системные требования

  • WordPress 6.0 или выше (тестировано до 7.0);
  • PHP 7.4 или выше;
  • права администратора для установки;
  • расширение openssl (рекомендуется) для шифрования ключа WAF;
  • команда
    diff
    в системе (опционально, для утилиты сравнения файлов ядра).

Установка

Установка выполняется стандартным образом из раздела «Плагины → Добавить новый» в консоли WordPress: достаточно ввести в поиске слово «sucuri» и установить плагин «By Sucuri Inc.». После активации в боковом меню появляется раздел с логотипом Sucuri. Для активации облачного мониторинга событий необходимо нажать кнопку «Generate API Key» — плагин сформирует уникальный ключ для аутентификации сайта в API-сервисе. Без API-ключа плагин работает в полностью локальном режиме.

Константы wp-config.php

Плагин уважает несколько определяемых пользователем констант:

// перенос хранилища данных в другую директорию
define('SUCURI_DATA_STORAGE', '/path/to/custom/storage');
// включение собственного API-сервиса аудита
define('SUCURISCAN_API_URL', 'https://your-api.example.com/');
// включение исключений и отладочных режимов
define('SUCURISCAN_THROW_EXCEPTIONS', true);
define('SUCURISCAN_NO_API_HANDLE', true);
define('SUCURI_CLEAR_CACHE_ON_PUBLISH', true);

Архитектура плагина

Точка входа

Единственная точка входа — файл

sucuri.php

в корне плагина. Его загрузка выполняет строгую последовательность действий:

  1. Определяет guard-константу
    SUCURISCAN_INIT
    — каждый файл из директории
    src/
    начинается с проверки: при прямом обращении к нему по HTTP возвращается код 403 Forbidden и выполнение прекращается;
  2. Проверяет наличие зависимостей WordPress (wp_die, add_action, wp_remote_get, wp_remote_post и др.);
  3. Определяет константы плагина;
  4. Последовательно подключает около 35 библиотек из директории
    src/
    ;
  5. Регистрирует хуки деактивации и удаления плагина.

Ключевые константы

Основные константы плагина
Константа Значение Назначение
SUCURISCAN
sucuriscan Идентификатор плагина, префикс опций
SUCURISCAN_VERSION
2.7.5 Версия плагина
SUCURISCAN_API_VERSION
v1 Версия API аудита
SUCURISCAN_CLOUDPROXY_API
https://waf.sucuri.net/api API Sucuri Firewall (WAF)
SUCURISCAN_CLOUDPROXY_API_VERSION
v2 Версия API WAF
SUCURISCAN_SCANNER_FREQUENCY
10800 Интервал сканирования файлов (сек)
SUCURISCAN_SITECHECK_LIFETIME
21600 Время жизни кэша SiteCheck (6 часов)
SUCURISCAN_MAX_REQUEST_TIMEOUT
5 Таймаут запросов к API (сек)
SUCURISCAN_AUDITLOGS_PER_PAGE
25 Записей аудита на страницу
SUCURISCAN_TWOFACTOR_USERS_PER_PAGE
25 Пользователей на странице 2FA

Иерархия классов

Код написан в процедурно-классовом стиле PHP 7.4 без пространств имён. Все классы статические и образуют цепочку наследования:

  • SucuriScan — базовый класс: пути к данным, определение IP-адреса клиента, валидация, форматирование дат и размеров, служебные функции;
  • SucuriScanRequest — санитизация параметров запроса (GET/POST/серверные переменные);
  • SucuriScanOption — хранение настроек (файл + миграция из БД), шифрование секретов;
  • SucuriScanAPI — все внешние API-вызовы через wp_remote_get/wp_remote_post;
  • SucuriScanSiteCheck / SucuriScanFirewall / SucuriScanMail — специализированные обёртки над API;
  • SucuriScanEvent — журналирование событий, отправка уведомлений, очереди логов;
  • SucuriScanHook — перехватчики событий WordPress.

Шаблонизатор

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

inc/tpl/*.html.tpl

(всего около 120 файлов: страницы, секции и сниппеты-повторители). Подстановка переменных использует три вида токенов:

  • %%SUCURI.X%%
    — экранированная подстановка (esc_attr);
  • %%%SUCURI.X%%%
    — «сырая» подстановка без экранирования;
  • {{Текст}}
    — локализуемая строка через __() при локали, отличной от en_US.

Все AJAX-запросы отправляются на admin-ajax.php с параметрами action=sucuriscan_ajax, nonce sucuriscan_page_nonce и переменной form_action, по которой диспетчер выбирает обработчик из явной карты из 26 действий.

Основные функции

Аудит событий (Audit Logs)

Система аудита — одна из ключевых функций плагина. Плагин перехватывает около 45 событий WordPress и записывает их в журнал с указанием уровня серьёзности:

  • Debug, Notice, Info, Warning, Error, Critical (0–5).

Перехватываются следующие категории событий:

  • вход в систему (успешный и неудачный), восстановление паролей, регистрация и удаление пользователей, изменение профилей;
  • публикация, редактирование, удаление, перемещение в корзину и переходы статусов записей и страниц;
  • активация, деактивация, установка, обновление и удаление плагинов;
  • установка, активация, обновление и удаление тем;
  • добавление и удаление виджетов, категорий, ссылок и вложений;
  • обновление ядра WordPress;
  • изменение настроек (сравнение POST-параметров с базой данных).

Важная деталь: журнал аудита не хранится в базе данных WordPress. События записываются в файловое хранилище плагина (очередь auditqueue) и отправляются на удалённый API-сервис пакетами. Перед сохранением все секретные данные (пароли, токены, ключи API, соли) маскируются регулярными выражениями — значения полей, попадающих под паттерны password|passwd|pwd|secret|token|api_key|access_key|private_key|client_secret|authorization|cookie|salt, заменяются на [redacted].

Журнал аудита доступен на странице «Events Reporting» с фильтрами по времени, типам событий, пользователям, плагинам, темам и полнотекстовым поиском (до 200 символов), пагинацией и кнопкой отправки очереди на сервер. В версии 2.7.5 добавлен экспорт полного журнала в CSV (до 7 колонок: дата, время, серьёзность, пользователь, IP, сообщение, детали) с защитой от инъекций формул — значения, начинающиеся с =, +, -, @, |, %, дополняются апострофом.

Контроль целостности файлов (File Integrity)

Инструмент проверки целостности ядра WordPress сравнивает локальные файлы с официальными контрольными суммами:

  • для стандартной проверки используется
    https://api.wordpress.org/core/checksums/1.0/?version={v}&locale={l}
    (алгоритм MD5);
  • при указании собственного репозитория в опции checksum_api — API GitHub (алгоритм SHA-1 для git-blob).

Сканируются директории ABSPATH, wp-admin и wp-includes (рекурсивно). Результат представляется в четырёх категориях: added (добавленные), removed (удалённые), modified (изменённые), stable (неизменённые). Для каждого проблемного файла указывается, можно ли его автоматически восстановить (проверяется право на запись).

Существует развитый механизм игнорирования файлов:

  • статические имена (php.ini, .htaccess, wp-config.php, readme.html, sitemap.xml и др.);
  • регулярные выражения: файлы sucuri_*.php, бекапы базы данных, изображения, PDF, CSS, локализации .mo/.po/.json, файлы верификации Google и Pinterest, favicon.ico и т.д.;
  • пользовательский список «помеченных как исправленные» (хранится в datastore integrity, ключ — md5 пути к файлу).

Утилита сравнения (Diff Utility) позволяет посмотреть различия между текущим файлом и оригиналом из WordPress: скачивает оригинал из

https://core.svn.wordpress.org/tags/{version}/{file}

и выполняет системную команду diff -u -- (доступность проверяется через опцию canExecuteCommands). Восстановление файлов защищено от path-traversal: путь проверяется функцией resolveIntegrityPath, не позволяющей выйти за пределы ABSPATH. Это исправление появилось в версии 2.7.4 после обнаружения уязвимости CVE-2026-73033.

Удалённое сканирование на вредоносный код (SiteCheck)

Плагин интегрирован с бесплатным удалённым сканером Sucuri SiteCheck:

  • запрос на
    https://sitecheck.sucuri.net/
    с параметрами json=1, fromwp=2 и адресом сканируемого сайта;
  • таймаут запроса 60 секунд (сам скан занимает около 20 секунд);
  • результаты кэшируются в хранилище sitecheck на 6 часов;
  • принудительное обновление — через параметр sucuriscan_sitecheck_refresh=true.

Сканер отдаёт данные о вредоносном коде (MALWARE.WARN: тип угрозы, заражённый URL, ссылка на документацию), статусах блоклистов (Sucuri Labs, Google Safe Browsing, Norton, AVG, Phish Tank, ESET, McAfee, Yandex, SpamHaus, Bitdefender), рекомендациях, а также статистике ссылок, iframe, внешних и локальных скриптов. Сканирование выполняется так, как это делает обычный посетитель, что позволяет обнаруживать «скрытый» вредоносный код.

Мониторинг блоклистов

Плагин показывает, в какие блоклисты попадает сайт. Это критично для репутации: если сайт занесён в блоклист Google Safe Browsing, он помечается в результатах поиска и в браузерах. SiteCheck проверяет более десяти крупнейших блоклист-провайдеров.

Усиление защиты (Hardening)

Раздел «Hardening & Prevention» предлагает 13 опций усиления защиты:

Опции усиления защиты
Опция Что делает
Firewall Показывает статус подключения Sucuri Firewall
WPVersion Информирует об актуальности версии WordPress
RemoveGenerator Удаляет мета-тег генератора WordPress (необратимо)
NginxPHPFPM Справочная опция для nginx
WPUploads Блокирует выполнение PHP в /wp-content/uploads через .htaccess
WPContent Блокирует выполнение PHP в /wp-content
WPIncludes Блокирует выполнение PHP в /wp-includes (с повторным разрешением wp-tinymce.php и ms-files.php)
Readme Удаляет файл readme.html
AdminUser Проверка аккаунта с логином «admin»
FileEditor Добавляет в wp-config.php константу DISALLOW_FILE_EDIT
SecKeyUpdater Автоматическое обновление секретных ключей по расписанию
XMLRPC Полное отключение XML-RPC (с предупреждением о зависимых плагинах, например Jetpack)
AllowPHPFiles Белый список отдельных PHP-файлов в заблокированных директориях

Блокировка PHP в директориях реализуется через .htaccess с совместимостью с Apache 2.2 и 2.4:

<FilesMatch "\.(?i:php)$">
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
</FilesMatch>

Плагин корректно удаляет собственные правила при отмене (включая легаси-правила старых версий) и не выполняет эту операцию на серверах nginx и IIS.

Пост-хак инструменты (Post-Hack)

Раздел для восстановления сайта после компрометации включает четыре инструмента:

  • Обновление секретных ключей — плагин получает новые ключи с
    https://api.wordpress.org/secret-key/1.1/salt/
    и перезаписывает блок define() в wp-config.php с сохранением форматирования и блокировкой файла LOCK_EX;
  • Сброс паролей пользователей — генерация 15-символьного пароля, создание reset-ключа и отправка письма;
  • Переустановка плагинов — резервное копирование директории, переустановка через Plugin_Upgrader с подавлением вывода, восстановление при сбое;
  • Доступные обновления — сводка обновлений плагинов и тем с возможностью отправки по электронной почте.

Последние входы (Last Logins)

Раздел показывает историю входов: все пользователи (с пагинацией по 25), администраторы (последние 5 входов с флагами стран), неудачные попытки и «сейчас в сети» (на основе transient, обновление каждые 15 минут, срок жизни 30 минут). Неудачные входы хранятся в отдельных файлах failedlogins и oldfailedlogins, а при превышении порога (по умолчанию 30 попыток в час) отправляется отчёт о brute-force атаке.

Хранение данных

Принципиальная особенность плагина — отказ от базы данных WordPress для собственных данных. Всё хранится в файловом хранилище:

  • корень хранилища:
    wp-content/uploads/sucuri/
    (переопределяется константой SUCURI_DATA_STORAGE);
  • каждый файл имеет вид
    sucuri-<имя>.php
    и начинается с PHP-guard
    <?php exit(0); ?>
    , который останавливает выполнение при прямом обращении;
  • настройки хранятся в файле sucuri-settings.php как одна строка JSON после guard-строки;
  • ключи хранилища допускают только символы [0-9a-zA-Z_].

Актуальные хранилища: sitecheck, auditqueue, auditlogs, trustip, integrity, ignorescanning, vulnerabilities, plugindata, lastlogins, failedlogins, oldfailedlogins, hookdata. При первом запуске плагин создаёт директорию (права 0755), защищает её .htaccess и кладёт index.html.

Шифрование секретов: ключ Sucuri Firewall (формат k/s — две 32-символьные hex-строки) хранится в опции cloudproxy_apikey в зашифрованном виде — AES-256-GCM с 12-байтовым случайным IV (поля iv/tag/ct в base64). Ключ шифрования выводится из солей, записываемых плагином в wp-config.php (SUCURI_PLUG_KEY / SUCURI_PLUG_SALT), которые, в свою очередь, производны от wp_salt('auth'). Поддерживается миграция легаси-формата v1 в v2; при отсутствии openssl или невозможности записи wp-config.php плагин переключается в режим хранения без шифрования с установкой флага no_salt_encryption.

Настройки плагина

Страница настроек состоит из пяти вкладок:

Вкладки настроек
Вкладка Содержимое
General Settings Хранилище данных (просмотр/удаление файлов), Self-Hosting (экспорт логов в собственный файл), Reverse Proxy, определение IP (IP Discoverer), часовой пояс, импорт/экспорт настроек, сброс опций
Scanner Расписание задач (cron), утилита Diff, кэш целостности, игнорируемые директории сканирования
Alerts Получатели, тема письма, лимит писем в час (5–160, или unlimited), порог brute-force (30–480/час), переключатели 25 типов событий, игнорируемые типы записей, доверенные IP
API Service Communication Статус сервиса, прокси, API контрольных сумм, целевой URL сканера SiteCheck
Website Info Сведения о сайте, содержимое .htaccess

Доверенные IP (Trusted IPs) хранятся в хранилище trustip (ключ — md5 адреса), поддерживают CIDR /8, /16, /24 и позволяют не отправлять события с этих адресов на удалённый сервис. Импорт/экспорт настроек выполняется по строгому белому списку из 35 опций — ключи API в экспорт сознательно не включаются. Сброс опций требует подтверждения и деактивирует плагин.

Управление HTTP-заголовками (Headers Management)

Плагин умеет управлять тремя группами заголовков, которые применяются через хук send_headers:

  • Cache-Control — режимы disabled/static/occasional/frequent/busy/custom; для 13 типов страниц (главная, записи, страницы, рубрики, метки, авторы, архивы, ленты, вложения, результаты поиска, 404, редиректы) настраиваются max-age, s-maxage, stale-if-error, stale-while-revalidate, множители пагинации и «старения». Пресет static, например, задаёт max-age 604800;
  • CSP (Content-Security-Policy) — только режим report-only (чтобы не ломать сайт);
  • CORS — режимы disabled/enabled.

Для WooCommerce-сайтов в таблице Cache-Control появляются дополнительные строки (товары и категории).

Двухфакторная аутентификация (2FA)

Начиная с версии 2.5 плагин включает собственную реализацию двухфакторной аутентификации на основе TOTP (RFC 6238):

  • алгоритм: HMAC-SHA1, 6 цифр, шаг 30 секунд, окно допуска ±2 тика, сравнение через hash_equals;
  • секрет (160 бит, base32) генерируется через random_bytes и хранится в метаданных пользователя sucuriscan_topt_secret_key;
  • QR-код формируется клиентски встроенной библиотекой qrcode-generator (MIT, vendored-копия из-за опасений по поводу компрометации npm-пакетов);
  • после ввода логина/пароля пользователь получает transient-токен (срок жизни 600 секунд) и направляется на страницу ввода кода;
  • защита от повтора: запоминается последний удачный тик времени;
  • лимиты попыток: 5 для TOTP и 3 для бэкап-кодов — при превышении сессия уничтожается;
  • режимы политики: disabled / all_users / selected_users; при списках более 25 000 пользователей политика отключается (fail-closed).

В версии 2.7.5 добавлены одноразовые бэкап-коды: 10 кодов по 8 символов из алфавита 23456789ABCDEFGHJKMNPQRSTUVWXYZ (без похожих символов 0/O/1/I/L), формат XXXX-XXXX. Коды хранятся только в виде хэшей wp_hash_password и расходуются однократно с защитой от гонок (условное обновление метаданных). Предупреждение о низком остатке (≤2 кода) отправляется как событие Warning.

Интеграция с Sucuri Firewall (WAF)

Плагин интегрируется с облачным Web Application Firewall Sucuri (платная услуга):

  • API-точка:
    https://waf.sucuri.net/api
    (версия v2);
  • действия: show_settings (состояние), audit_trails (журналы), blacklist_ip / delete_blacklist_ip (блокировка IP), clear_cache (очистка кэша);
  • после ввода ключа автоматически включается режим reverse proxy и заголовок HTTP_X_SUCURI_CLIENTIP для определения реального IP посетителя;
  • очистка кэша при публикации записей (опция auto_clear_cache);
  • определение «за фаерволом» — по наличию заголовка HTTP_X_SUCURI_CLIENTIP;
  • при несовпадении домена сайта и домена WAF выводится предупреждение.

Доступ к WAF-ключу имеют только аккаунты с подпиской Sucuri; бесплатная версия плагина показывает рекламные панели и модальное окно активации ключа.

Сканеры уязвимостей

Премиальные сканеры (разблокируются ключом WAF) проверяют версии ядра, PHP, плагинов и тем против базы уязвимостей:

  • API:
    https://wp-plugin.sucuri.net/v1/vulnerabilities/{php|core|plugin|theme}/{slug}/{version}
    ;
  • аутентификация: Bearer-токен WAF-ключа, заголовок X-Sucuri-WAF: 1 при работе за фаерволом;
  • кэширование результатов на 1 час (хранилище vulnerabilities);
  • вывод CVE-записей с идентификаторами, описаниями, серьёзностью и затронутыми версиями;
  • данные предоставляются в партнёрстве с проектом WPVulnerability.

Командная строка (wp-cli)

Плагин предоставляет команды wp-cli:

# регистрация сайта или установка ключа API
wp sucuri register
wp sucuri register 0123456789abcdef0123456789abcdef

# игнорирование файла в проверке целостности
wp sucuri integrity ignore /path/to/file.php
wp sucuri integrity ignore /path/to/file.php --reason=modified

# отмена игнорирования
wp sucuri integrity unignore /path/to/file.php

Планировщик задач

Плагин использует стандартный WP-Cron:

  • sucuriscan_scheduled_scan — ежедневно (через 10 секунд после установки): сканирование дерева файлов с MD5-суммами (троттлинг 3 часа), отправка версии сайта, проверка целостности, проверка обновлений, отправка очереди логов (с бюджетом max_execution_time − 6 секунд);
  • sucuriscan_autoseckeyupdater — еженедельно: автоматическое обновление секретных ключей;
  • дополнительные частоты: weekly, monthly, quarterly; доступна опция «Never (no execution)»;
  • управление расписанием — из вкладки Scanner (runnow / remove / перепланирование).

Безопасность самого плагина

Защитные механизмы

  • Direct-access guard (403) во всех PHP-файлах;
  • все формы защищены nonce sucuriscan_page_nonce;
  • AJAX-диспетчер требует manage_options и строгую валидацию form_action (regex ^[a-z0-9_]+$), неизвестные действия отвергаются;
  • ввод валидируется регулярными выражениями: адрес заголовка IP, часовой пояс (UTC±XX.XX), типы записей (до 20 символов), тема письма, URL контрольных сумм (только GitHub);
  • пути к файлам проверяются на выход за ABSPATH, имена файлов хранилища — по белому списку;
  • маскировка секретов в логах и CSV-экспорте; исключение ключей API из экспорта настроек;
  • cookie-хелпер SucuriScanCookie: строгие whitelist-паттерны имён/значений, httponly, Secure при HTTPS, SameSite=Lax;
  • 2FA-токены привязаны к сессии, user-agent и redirect-валидации.

Известные уязвимости

Известные CVE
CVE Описание CVSS Затронуты Исправлено
CVE-2022-29489 CSRF: создание записей журнала событий (CWE-352) 4.3 (Medium) ≤ 1.8.33 1.8.34 (referer-проверки на admin-хуках)
CVE-2026-73033 Path traversal → удаление произвольных файлов через sucuriscan_integrity[]=../../../wp-config.php (CWE-22) 6.5 (CVSS 3.1) / 7.0 (CVSS 4.0) ≤ 2.7.3 2.7.4 (normalizePath + resolveIntegrityPath + allowlist статусов)

Дополнительно: хранимый XSS через неэкранированные имена файлов в журнале аудита (исправлен в 2.7.4), исторический низкоприоритетный XSS в 1.7.16. Плагин за всё время существования имел только две официальные CVE — обе закрыты в короткие сроки.

Тестирование и CI/CD

Репозиторий плагина отличается зрелой инженерной культурой:

  • PHPUnit: 25 тест-классов (~196 методов) с моками Brain\Monkey; покрываются TOTP-векторы RFC 6238, миграция шифрования AES-GCM v1→v2, инварианты маскировки секретов, защита CSV от формул, отказ в path-traversal;
  • Playwright: 21 e2e-спека (9 features + 11 mutations + 1 unit) на едином wp-env; workers=1, т.к. тесты мутируют глобальное состояние; артефакты браузера (trace/screenshot/video) отключены, чтобы не захватывать пароли и TOTP-секреты;
  • phpcs.xml — явный allowlist сниффов: только security-группы (EscapeOutput, NonceVerification, ValidatedSanitizedInput, PreparedSQL, i18n, Capabilities и т.п.); полный импорт WPCS давал бы ~19 000 нарушений;
  • GitHub Actions: unit-тесты на PHP 7.4/8.5, e2e на 7.4/8.0, pre-release-проверки (кодировка, согласованность версий, манифест дистрибутива), аудит зависимостей composer/npm только на релизах, деплой на WordPress.org через 10up/action-wordpress-plugin-deploy;
  • манифест дистрибутива — белый список из 7 элементов (LICENSE, inc, index.html, lang, readme.txt, src, sucuri.php), нарушение ломает CI.

Сравнение с другими плагинами

Сравнение с популярными решениями
Критерий Sucuri Security Wordfence MalCare iThemes Security
Локальный скан файлов Хеши-сигнатуры (MD5-дерево) Собственный движок сигнатур Облачный скан Собственный движок
Удалённый скан SiteCheck Да (бесплатно) Нет Да (платно) Нет
Аудит событий Файловый журнал + API БД + таблицы Да Да
2FA Встроенная (TOTP) с 2.5 Встроенная Нет Встроенная
Сканер уязвимостей плагинов Премиум (ключ WAF) Встроенный (бесплатно) Платно Встроенный
WAF Облачный Sucuri (платно) Встроенный (бесплатно, лимит) Облачный (платно) Облачный (платно)
Хранение данных Файлы, без БД База данных База данных База данных

Главное отличие Sucuri — связка бесплатного локального инструментария с платными услугами Sucuri (SiteCheck, WAF, гарантированная чистка заражённых сайтов). Слабым местом бесплатной версии традиционно считается отсутствие собственного локального антивирусного движка сигнатур — обнаружение вредоносного кода в основном делегировано облаку.

Резюме

Sucuri Security (sucuri-scanner) — зрелый и широко распространённый антивирусный плагин WordPress (600 000+ установок, 2 CVE за 15 лет, обе закрыты). Его сильные стороны:

  • полный набор локальных инструментов: аудит событий, контроль целостности ядра с diff-утилитой, hardening из 13 опций, пост-хак восстановление, журналы входов;
  • принцип «без базы данных» — файловое хранилище с PHP-guard и шифрованием секретов AES-256-GCM;
  • встроенный TOTP 2FA с бэкап-кодами;
  • удалённый скан SiteCheck и мониторинг блоклистов;
  • интеграция с платным облачным WAF Sucuri;
  • серьёзная инженерная культура: тесты, CI, явные security-сниффы.

Ограничения: для облачного аудита требуется константа SUCURISCAN_API_URL (официальный сервис отключён), премиальные сканеры уязвимостей требуют платного ключа WAF, а локальное детектирование вредоносного кода уступает движкам Wordfence/MalCare. Плагин подходит как базовая система мониторинга и усиления защиты, особенно для сайтов, планирующих подключение платных сервисов Sucuri.

Ссылки

×
Реклама
ИКС