Wordpress - sucuri-scanner - антивирусный плагин - 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
в корне плагина. Его загрузка выполняет строгую последовательность действий:
- Определяет guard-константу
SUCURISCAN_INIT
— каждый файл из директорииsrc/
начинается с проверки: при прямом обращении к нему по HTTP возвращается код 403 Forbidden и выполнение прекращается; - Проверяет наличие зависимостей WordPress (wp_die, add_action, wp_remote_get, wp_remote_post и др.);
- Определяет константы плагина;
- Последовательно подключает около 35 библиотек из директории
src/
; - Регистрирует хуки деактивации и удаления плагина.
Ключевые константы
| Константа | Значение | Назначение |
|---|---|---|
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 | Описание | 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.
Ссылки
- Страница плагина на WordPress.org
- Официальный репозиторий GitHub
- SVN-репозиторий WordPress.org
- Обзор кода на Trac
- Зеркало common-repository
- База знаний Sucuri по плагину
- Профиль уязвимостей на WPScan
- CVE-2022-29489 в NVD
- CVE-2026-73033 в NVD
- GHSA-vxwv-hcj3-j79g
- Трекер проблем GitHub
- Оценка wp-safety.org
- Сравнение Sucuri и Wordfence
- Сайт Sucuri
