Описание
WordSec является полноценным плагином безопасности WordPress. Восемь модулей охватывают firewall, сканер вредоносного ПО, безопасность входа, живой трафик, блокировку по IP и странам, анализ цепочки поставок, журнал аудита и оповещения, поэтому вы блокируете атаки и укрепляете сайт с одной панели вместо установки восьми плагинов.
Если ваш сайт взломают, вы потеряете не только сайт. Вы потеряете доверие клиентов, позиции в поиске и дни работы на восстановление резервных копий. WordSec создан, чтобы не допустить этого, и чтобы помочь вам восстановиться, если это уже произошло: сканер находит вредоносное ПО, карантин убирает его с дороги, а изменённые файлы ядра, плагинов и тем восстанавливаются из оригинальных копий.
Бесплатно, и лицензионный ключ вводить не нужно. Правила firewall WAF, сканирование вредоносного ПО и целостности файлов, защита от brute force, двухфакторная аутентификация, блокировка по IP и странам, журнал аудита и усиление защиты одним щелчком работают локально на вашем собственном сервере.
Firewall веб-приложений (WAF)
- Конструктор пользовательских правил с regex и подстановочными знаками
- Встроенные правила для SQL injection, XSS, path traversal, PHP и command injection
- Режимы обучения и активной защиты, блокировка ботов, заголовки безопасности, rate limiting
- Более 25 переключателей усиления защиты для доступа к wp-config, перечисления авторов и REST API
- Необязательная расширенная защита: проверка запросов до загрузки WordPress (по вашему согласию, полностью обратимо)
Сканер и удаление вредоносного ПО
- Правила обнаружения вредоносного ПО в файлах, базе данных и запланированных задачах
- Проверка целостности файлов ядра, плагинов и тем через API WordPress.org
- Плановые сканирования, карантин и восстановление одним щелчком
- Удаление вредоносного ПО на взломанном сайте: поместите находку в карантин или восстановите изменённый файл ядра, плагина или темы из оригинальной копии
Безопасность входа, двухфакторная аутентификация (2FA) и защита от brute force
- Двухфакторная аутентификация на основе ролей (RFC 6238 TOTP)
- reCAPTCHA, hCaptcha и Cloudflare Turnstile, а также встроенная математическая CAPTCHA
- Защита от brute force с прогрессивной блокировкой, honeypot и переименованием URL входа
- Проверка утёкших паролей, управление сеансами, собственная страница входа
Живой трафик
- Журналирование запросов в реальном времени с обнаружением ботов и экспортом в CSV
- Фильтрация исключений по роли, IP, стране или URI
Блокировка по IP и странам
- Списки разрешений или блокировки по странам и континентам
- Блокировка по IP и CIDR, временная или постоянная, с поддержкой списка разрешённых
Цепочка поставок и анализ угроз
- Оценка репутации и обнаружение заброшенных плагинов
- Оповещения об известных уязвимостях ядра, плагинов, тем и PHP
- Проверка целостности обновлений с резервными копиями и инвентаризацией SBOM
Журнал аудита
- Отслеживание активности по 11 типам объектов и 14 действиям
Тревога
- 36 типов событий оповещений с доставкой по Email, Telegram или Slack
Все функции работают локально, без лицензионного ключа. При желании служба WordSec на wordsec.net поставляет данные анализа угроз, которые невозможно получить локально: управляемые наборы правил WAF, ленту сигнатур вредоносного ПО, списки репутации IP, базу GeoIP и записи об уязвимостях. Подключение необязательно, и каждая внешняя служба описана ниже в разделе «Внешние службы».
Внешние сервисы
WordSec спроектирован для локальной работы, и без лицензионного ключа он не отправляет исходящих запросов к сервису WordSec. Основная фильтрация запросов и сканирование файлов выполняются на вашем сервере. К перечисленным ниже сервисам обращение происходит только для описанных конкретных функций, и к большинству из них только когда вы явно включаете соответствующую функцию (или, в случае WordSec API, только после активации лицензионного ключа). В этом разделе документируется каждый сторонний сервис, к которому может подключаться плагин, и данные, которые получает каждый из них.
WordSec API (api.wordsec.net)
WordSec работает бесплатно без лицензии, и в этом случае он вообще не обращается к этому сервису. Бесплатная лицензия доступна каждому; после активации ключа плагин связывается с сервисом WordSec для двух отдельных целей:
- Обязательные обращения к сервису (только пока активен лицензионный ключ): активация и проверка лицензии, а также обновления данных об угрозах (правила файрвола, сигнатуры вредоносного ПО, списки репутации IP, данные GeoIP, список доменов одноразовой электронной почты и данные об известных уязвимостях). Они обеспечивают работу облачных функций и не могут выполняться локально; без ключа ни одно из этих обращений не выполняется. Локальный код применения для этих функций (движок WAF, сканер вредоносного ПО, фильтры блокировки IP и фильтр ограничения регистрации) всегда присутствует и активен; без актуальной ленты у него просто нет данных threat-intelligence, с которыми можно сверять запросы.
* Когда: при активации/проверке и при плановых проверках обновлений данных об угрозах.
* Отправляемые данные: URL вашего сайта и лицензионный ключ (используются для вашей аутентификации и привязки лицензии к этому сайту), а для проверок обновлений: текущие версии установленных вами лент данных об угрозах.
- Дополнительная телеметрия использования/окружения (ПО ЖЕЛАНИЮ, ПО УМОЛЧАНИЮ ОТКЛЮЧЕНА): анонимный ежедневный снимок, используемый для улучшения WordSec. Он отправляется только после того, как вы явно включите «Share usage & environment data» (при активации лицензии или в Настройки Advanced Usage Data), и его можно снова отключить в любой момент.
* Когда: один раз в день, только пока включена опция.
* Отправляемые данные: обезличенный снимок окружения сайта (версии сервера, WordPress, PHP и базы данных, список активных плагинов и тем) и агрегированная статистика использования функций и безопасности WordSec. Пароли, учётные данные базы данных, секретные ключи или адреса электронной почты никогда не отправляются.
- Условия обслуживания: https://wordsec.net/terms
- Политика конфиденциальности: https://wordsec.net/privacy
Have I Been Pwned (api.pwnedpasswords.com)
Используется дополнительной проверкой утечки паролей для обнаружения того, встречается ли пароль в известных утечках данных, с использованием k-anonymity.
* Когда: когда пользователь задаёт или отправляет пароль и включена проверка утечки паролей.
* Отправляемые данные: только первые 5 символов SHA-1 хеша пароля. Сам пароль и его полный хеш никогда не покидают ваш сайт.
* Условия и конфиденциальность: https://haveibeenpwned.com/Privacy
WordPress.org API (api.wordpress.org, downloads.wordpress.org, wordpress.org, core.svn.wordpress.org, plugins.svn.wordpress.org, themes.svn.wordpress.org)
Используется для проверки целостности файлов ядра WordPress, плагинов и тем, для получения публичной информации о плагинах/темах (plugins_api/themes_api) для оценок репутации цепочки поставок и проверок целостности обновлений, для загрузки собственного языкового пакета WordSec с translate.wordpress.org, когда вы выбираете язык интерфейса, который ещё не установлен (тот же механизм, который использует сам WordPress при смене языка сайта), и — только когда вы нажимаете «Repair» на находке сканера — для загрузки оригинальной копии изменённого файла ядра/плагина/темы, чтобы его можно было восстановить. Загрузки для восстановления получают отдельные оригинальные файлы с plugins.svn.wordpress.org / themes.svn.wordpress.org / core.svn.wordpress.org, с откатом к полным пакетам с downloads.wordpress.org (zip-архивы плагинов/тем) и wordpress.org (zip-архивы релизов ядра).
* Когда: во время сканирований на вредоносное ПО/целостность и проверок репутации цепочки поставок, при явном действии восстановления и при сохранении языка интерфейса, перевод которого ещё не установлен.
* Отправляемые данные: версия ядра WordPress, локаль сайта и слаги/версии проверяемых плагинов/тем; при загрузке языка — слаг/версия плагина и выбранная локаль.
* Условия и конфиденциальность: https://wordpress.org/about/privacy/
RDAP (rdap.org)
Используется инструментом поиска WHOIS/RDAP на странице Инструменты для отображения информации о владельце IP-адреса или домена, который вы проверяете.
* Когда: только когда вы запускаете инструмент поиска WHOIS/RDAP.
* Отправляемые данные: IP-адрес или домен, который вы выбрали для поиска.
* Условия и конфиденциальность: https://about.rdap.org/
ipify (api.ipify.org)
Используется инструментом проверки чёрных списков на странице Инструменты и инструментом информации о сервере для определения собственного публичного IP-адреса вашего сервера.
* Когда: только когда вы запускаете инструмент «Blacklist Check» или «Server IPs».
* Отправляемые данные: обычный запрос с вашего сервера; данные сайта не включаются (сервис просто возвращает запрашивающий IP).
* Условия и конфиденциальность: https://www.ipify.org/
Провайдеры списков блокировки DNS (инструмент Blacklist Check)
Инструмент «Blacklist Check» на странице Инструменты отправляет запросы к спискам блокировки на основе DNS (DNSBL), чтобы сообщить, внесён ли публичный IPv4-адрес вашего сервера в списки. Каждый провайдер получает стандартный DNS-запрос, содержащий IP-адрес вашего сервера в обратном порядке. Опрашиваются пять провайдеров:
* Spamhaus ZEN (zen.spamhaus.org): https://www.spamhaus.org/privacy-notice/
* SpamCop (bl.spamcop.net), управляется Cisco: https://www.cisco.com/c/en/us/about/legal/privacy-full.html
* Barracuda Reputation Block List (b.barracudacentral.org): https://www.barracuda.com/company/legal/privacy-policy
* UCEPROTECT Level 1 (dnsbl-1.uceprotect.net): https://www.uceprotect.net/en/index.php
* PSBL (psbl.surriel.com): https://psbl.org/
Подробности:
* Когда: только когда вы нажимаете «Blacklist Check» на странице Инструменты.
* Отправляемые данные: публичный IPv4-адрес вашего сервера, встроенный в каждый DNS-запрос к спискам блокировки.
Telegram Bot API (api.telegram.org)
Дополнительный канал доставки оповещений. Активен только когда вы настраиваете собственный токен бота Telegram и ID чата.
* Когда: когда срабатывает включённое вами оповещение безопасности и настроена доставка через Telegram.
* Отправляемые данные: текст сообщения оповещения (тип события, название сайта, соответствующий контекст IP/пользователя) на настроенный вами бот/чат.
* Условия обслуживания: https://telegram.org/tos
* Политика конфиденциальности: https://telegram.org/privacy
Входящие вебхуки Slack (hooks.slack.com)
Дополнительный канал доставки оповещений. Активен только когда вы настраиваете собственный URL входящего вебхука Slack.
* Когда: когда срабатывает включённое вами оповещение безопасности и настроена доставка через Slack.
* Отправляемые данные: текст сообщения оповещения (тип события, название сайта, соответствующий контекст IP/пользователя) на настроенный вами вебхук.
* Условия обслуживания: https://slack.com/terms-of-service
* Политика конфиденциальности: https://slack.com/privacy-policy
Google reCAPTCHA (www.google.com, www.gstatic.com)
Дополнительная CAPTCHA для входа/регистрации. Активна только когда вы выбираете reCAPTCHA и указываете свои собственные ключи.
* Когда: на формах входа и регистрации, пока функция включена.
* Загружается удалённо: reCAPTCHA требует, чтобы его скрипт виджета (www.google.com/recaptcha/api.js, поставляемый с ресурсами с www.gstatic.com) загружался из Google в браузере посетителя; он подключается только на этих формах и только пока reCAPTCHA выбран в качестве провайдера. Проверка токена выполняется серверным запросом с вашего сайта к www.google.com.
* Отправляемые данные: токен ответа CAPTCHA, ваш публичный ключ сайта и IP-адрес посетителя.
* Условия обслуживания: https://policies.google.com/terms
* Политика конфиденциальности: https://policies.google.com/privacy
hCaptcha (hcaptcha.com, js.hcaptcha.com)
Дополнительная CAPTCHA для входа/регистрации. Активна только когда вы выбираете hCaptcha и указываете свои собственные ключи.
* Когда: на формах входа и регистрации, пока функция включена.
* Загружается удалённо: hCaptcha требует, чтобы его скрипт виджета (js.hcaptcha.com/1/api.js) загружался из hCaptcha в браузере посетителя; он подключается только на этих формах и только пока hCaptcha выбран в качестве провайдера. Проверка токена выполняется серверным запросом с вашего сайта к hcaptcha.com.
* Отправляемые данные: токен ответа CAPTCHA, ваш публичный ключ сайта и IP-адрес посетителя.
* Условия обслуживания: https://www.hcaptcha.com/terms
* Политика конфиденциальности: https://www.hcaptcha.com/privacy
Cloudflare Turnstile (challenges.cloudflare.com)
Дополнительная CAPTCHA для входа/регистрации. Активна только когда вы выбираете Turnstile и указываете свои собственные ключи.
* Когда: на формах входа и регистрации, пока функция включена.
* Загружается удалённо: Turnstile требует, чтобы его скрипт виджета (challenges.cloudflare.com/turnstile/v0/api.js) загружался из Cloudflare в браузере посетителя; он подключается только на этих формах и только пока Turnstile выбран в качестве провайдера. Проверка токена выполняется серверным запросом с вашего сайта к challenges.cloudflare.com.
* Отправляемые данные: токен ответа CAPTCHA, ваш публичный ключ сайта и IP-адрес посетителя.
* Условия обслуживания: https://www.cloudflare.com/website-terms/
* Политика конфиденциальности: https://www.cloudflare.com/privacypolicy/
ipwhois.io (ipwho.is)
Необязательная служба сведений об IP, по умолчанию отключена. Все запросы выполняются по HTTPS с проверкой сертификата, и ни один из них не отправляется, пока вы не включите «Служба внешнего поиска IP» в настройках WordSec (раздел «Обработка IP-адреса посетителя»). Она используется ровно для одного: для поиска сведений об IP в живом трафике (страна, регион, город, ISP, организация, ASN). Журналирование трафика никогда не обращается к этой службе; определение страны при журналировании использует только локальную базу GeoIP.
* Когда: только пока включено согласие на службу внешнего поиска IP и только по вашему щелчку в окне сведений об IP.
* Отправляемые данные: IP-адрес, который вы выбрали для проверки.
* Условия обслуживания: https://ipwhois.io/terms
* Политика конфиденциальности: https://ipwhois.io/privacy
VirusTotal (virustotal.com)
Не запрашивается автоматически. Сканер показывает ссылку «Check on VirusTotal», которую можно нажать, чтобы открыть VirusTotal в браузере для конкретного файла.
* Когда: только когда вы нажимаете ссылку.
* Отправляемые данные: хеш файла, содержащийся в URL ссылки.
* Условия и конфиденциальность: https://docs.virustotal.com/docs/privacy-policy
Qualys SSL Labs (ssllabs.com)
Не запрашивается автоматически. Тест «Check SSL Health» на странице Инструменты выполняется полностью на вашем собственном сервере (он открывает TLS-соединение с вашим доменом и считывает сертификат). Рядом с ним ссылка «Deep Scan (SSL Labs)» открывает тест Qualys SSL Labs в новой вкладке браузера; затем SSL Labs подключается к вашему сайту снаружи и оценивает его конфигурацию TLS. Ссылка содержит флаг «hide results», поэтому отчёт не публикуется на публичной доске SSL Labs.
* Когда: только когда вы нажимаете ссылку «Deep Scan (SSL Labs)».
* Отправляемые данные: доменное имя вашего сайта, содержащееся в URL ссылки.
* Условия: https://www.ssllabs.com/about/terms.html
* Конфиденциальность: https://www.qualys.com/company/privacy/
Благодарности
WordSec включает перечисленные ниже сторонние библиотеки. Каждая библиотека распространяется под лицензией, совместимой с собственной лицензией WordSec «GPLv2 or later». Каждая включённая библиотека сохраняет свой внутрифайловый лицензионный баннер и/или свой исходный файл лицензии, а полный оригинальный (не минифицированный) исходный код каждой из них доступен по ссылке на соответствующий проект и версию.
Библиотеки PHP (`vendor/`)
TCPDF 6.11.3
* Лицензия: LGPL-3.0-or-later
* Авторские права: Nicola Asuni, Tecnick.com LTD
* Источник: https://github.com/tecnickcom/TCPDF
* Файл лицензии: vendor/tecnickcom/tcpdf/LICENSE.TXT
* Используется для: генерации отчётов и экспорта в PDF
SimpleXLSXGen 1.5.x
* Лицензия: MIT
* Авторские права: (c) 2020-2022 Sergey Shuchkin
* Источник: https://github.com/shuchkin/simplexlsxgen
* Файл лицензии: vendor/shuchkin/simplexlsxgen/LICENSE
* Используется для: экспорта в XLSX (Excel)
Библиотеки JavaScript / CSS (`assets/*/vendor/`)
Select2 4.1.0-rc.0
* Лицензия: MIT
* Авторские права: Kevin Brown, Igor Vaynberg и участники Select2
* Источник: https://github.com/select2/select2
* Текст лицензии: https://github.com/select2/select2/blob/master/LICENSE.md
* Включённые файлы: assets/js/vendor/select2.min.js, assets/css/vendor/select2.min.css
ApexCharts 5.16.0
* Лицензия: MIT
* Авторские права: (c) 2018-2026 ApexCharts
* Источник: https://github.com/apexcharts/apexcharts.js
* Текст лицензии: https://github.com/apexcharts/apexcharts.js/blob/main/LICENSE
* Включённые файлы: assets/js/vendor/apexcharts.min.js
jsVectorMap 1.7.0
* Лицензия: MIT
* Авторские права: (c) Mustafa Omar и участники jsVectorMap
* Источник: https://github.com/themustafaomar/jsvectormap
* Текст лицензии: https://github.com/themustafaomar/jsvectormap/blob/master/LICENSE
* Включённые файлы: assets/js/vendor/jsvectormap.min.js, assets/css/vendor/jsvectormap.min.css
* Используется для: визуализаций карты мира (Живой трафик / Блокировка / Файрвол)
Данные карты мира (world_mill), зарегистрированные как карта «world» в jsVectorMap
* Лицензия: MIT
* Авторские права: участники jvectormap-content; геометрия карты получена из Natural Earth (public domain)
* Источник: https://www.npmjs.com/package/jvectormap-content
* Включённые файлы: assets/js/vendor/world.js
* Используется для: геометрии стран, отображаемой в визуализациях карты мира выше
qrcode-generator 1.4.4
* Лицензия: MIT
* Авторские права: Kazuhiko Arase
* Источник: https://github.com/kazuhikoarase/qrcode-generator
* Текст лицензии: https://github.com/kazuhikoarase/qrcode-generator/blob/master/LICENSE
* Включённые файлы: assets/js/vendor/qrcode.min.js
Иконки / ресурсы
flag-icons (SVG-флаги стран)
* Лицензия: MIT (SVG-разметка); сами дизайны флагов находятся в public domain
* Авторские права: (c) 2013 Panayiotis Lipiridis
* Источник: https://github.com/lipis/flag-icons
* Текст лицензии: https://github.com/lipis/flag-icons/blob/main/LICENSE
* Включённые файлы: assets/images/flags/*.svg (флаги стран, 4×3 viewBox="0 0 640 480")
Скриншоты








Установка
- Загрузите файлы плагина в
/wp-content/plugins/wordsec/или установите его через экран Плагины в WordPress. - Активируйте плагин через экран Плагины в WordPress.
- Откройте меню WordSec, чтобы начать настройку.
При активации создаются только таблицы базы данных плагина, настройки по умолчанию и его собственный каталог данных. WordSec никогда не изменяет .htaccess, .user.ini или wp-config.php, не меняет права доступа к файлам и не устанавливает пред-WordPress загрузчик WAF без явного, чётко обозначенного действия с вашей стороны, а при деактивации все такие изменения отменяются.
Часто задаваемые вопросы
-
Замедляет ли WordSec мой сайт?
-
Нет. WordSec построен на минимальном количестве запросов к базе данных, пакетной обработке и интеллектуальном кэшировании, поэтому защита не достигается ценой производительности.
-
Нужен ли лицензионный ключ для использования WordSec?
-
Нет. WordSec устанавливается и работает как полностью функциональный бесплатный плагин с локальной защитой: файрвол веб-приложений (ваши собственные пользовательские правила плюс встроенные предустановленные правила), защита от brute-force и защита входа, двухфакторная аутентификация, усиление безопасности, настройка геоблокировки, журнал аудита и многое другое работают без какого-либо ключа.
-
Требуется ли какой-либо внешний сервис?
-
Нет, для работы не требуется. Основная защита WordSec выполняется локально на вашем сервере, и без лицензионного ключа плагин вообще не обращается ни к каким внешним сервисам WordSec.
-
Поможет ли WordSec удалить вредоносное ПО на взломанном сайте?
-
Да. Сканер безопасности проверяет ваши файлы, базу данных и запланированные задачи, и любую находку можно поместить в карантин одним щелчком. Изменённый файл ядра WordPress, плагина или темы можно также восстановить прямо из оригинальной копии на WordPress.org, а история сканирований хранит запись обо всём, что было найдено и изменено.
-
Есть ли в WordSec защита от brute force?
-
Да. Неудачные попытки входа ограничиваются по частоте с прогрессивной блокировкой, поэтому каждая следующая попытка из того же источника ждёт дольше. Также можно добавить поле honeypot, переименовать URL входа, потребовать CAPTCHA в форме входа и ограничить вход по IP, стране или времени суток.
-
Поддерживает ли WordSec двухфакторную аутентификацию?
-
Да. Двухфакторная аутентификация использует коды TOTP по RFC 6238 из любого стандартного приложения-аутентификатора, а вы выбираете, для каких ролей она обязательна. На случай, когда устройство потеряно и войти не может никто, константа WORDSEC_DISABLE_2FA в wp-config.php даёт аварийный доступ.
-
Что на самом деле блокирует firewall веб-приложений?
-
Встроенные наборы правил охватывают SQL injection, cross-site scripting, path traversal, а также PHP и command injection. Вы можете добавлять собственные правила в конструкторе с несколькими условиями, запускать firewall в режиме обучения, прежде чем что-либо блокировать, и при желании включить расширенную защиту, чтобы запросы проверялись до загрузки WordPress.
-
Можно ли использовать WordSec вместе с другим плагином безопасности?
-
Можно, но не рекомендуется. Два firewall, проверяющие один и тот же запрос, или два сканера, обходящие одни и те же файлы, стоят вам производительности и дают дублирующиеся оповещения. WordSec создан, чтобы полностью отвечать за безопасность сайта, поэтому обычно остальные плагины сначала отключают.
-
Каковы минимальные требования?
-
WordPress 6.9+, PHP 7.4+ и MySQL 5.6+ / MariaDB 10.1+.
Отзывы
Участники и разработчики
«WordSec – сканер и удаление вредоносного ПО, Firewall веб-приложений (WAF) и 2FA» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:
Участники«WordSec – сканер и удаление вредоносного ПО, Firewall веб-приложений (WAF) и 2FA» переведён на 7 языков. Благодарим переводчиков за их работу.
Заинтересованы в разработке?
Посмотрите код, проверьте SVN репозиторий, или подпишитесь на журнал разработки по RSS.
Журнал изменений
1.1.2
- Changed: Confirmed compatibility with WordPress 7.1.
1.1.1
- Security: REST API responses no longer honour the ?_jsonp= callback parameter, which let any other site read a response through a script tag. A «Disable JSONP Responses» toggle in Firewall Config covers it and ships on.
- Fixed: A number of bugs reported since 1.1.0. The login CAPTCHA logged a failed challenge and then let the login through, and its widget did not render for Turnstile and hCaptcha; the setup wizard applied your choices one step early and could lock itself out of the license step; removing an orphaned scheduled task did not always remove it, and tasks owned by an active plugin kept coming back as findings; a file with an ownership mismatch offered delete and quarantine as its only fix; and the «critical issues found» notice stayed on screen after the findings were repaired.
- Fixed: A site behind a same-server reverse proxy could ban itself, because every visitor arrived as 127.0.0.1. Loopback addresses are never blocked now, at any layer, and rows written before this fix are ignored.
- Changed: Request rate limiting now ships off by default. A blanket per-IP request cap also catches crawlers and shared office connections, so it is an opt-in like the other options that can turn visitors away.
1.1.0
- Исправлено: удаление плагина с выбранной очисткой данных и последующая переустановка могли навсегда лишить пользователей двухфакторной аутентификации возможности войти, потому что сохранённые секреты 2FA переживали удаление, а их ключ шифрования нет. Теперь удаление убирает данные плагина по каждому пользователю вместе с ключом, а вариант «сохранить только лицензионный ключ» сохраняет ключевой материал, необходимый сохранённой лицензии.
- Исправлено: после удаления плагина оставались кэшированные записи и папки GeoIP и карантина; теперь всё в uploads/wordsec удаляется, если не выбран вариант «сохранить всё».
1.0.10
- Изменено: необязательная служба ipwhois.io теперь вызывается только при открытии окна сведений об IP в живом трафике. Журналирование трафика больше к ней не обращается, поэтому фоновые визиты не могут израсходовать месячную квоту запросов и оставить в окне сведений об IP сообщение о превышении лимита запросов.
- Изменено: журнал живого трафика больше не хранит город для каждого запроса, а неиспользуемый столбец города удалён из базы данных. Город по-прежнему показывается в окне сведений об IP.
- Исправлено: таблица заблокированных IP-адресов после обновления страницы загружала 25 строк, хотя было выбрано 10 на страницу. Выбор числа строк на странице, сортировка и текущая страница теперь запоминаются, как в остальных таблицах журналов, а кнопка «Сбросить» возвращает диапазон времени к значению «Все».
- Исправлено: при сортировке таблицы журнала оповещений или журнала Firewall стрелка столбца могла указывать в сторону, противоположную фактическому порядку.
1.0.9
- Исправлено: на сайтах, где WordPress установлен в подкаталоге, переименование URL входа не оставляло пути внутрь: пользовательский адрес входа возвращал 404, а wp-login.php и wp-admin оставались заблокированы. Теперь пользовательский адрес работает, как и сокращения /login, /admin и /dashboard.
- Исправлено: параметр «Блокировать доступ к конфиденциальным файлам» блокировал законные загрузки из медиатеки (.zip, .sql, .log и подобные) при установке в подкаталог, потому что исключение для папки uploads не совпадало. Теперь исключение следует за реальным расположением uploads.
- Исправлено: ловушка Blackhole никогда не срабатывала при установке в подкаталог, а запрос со строкой запроса проходил мимо неё везде.
- Исправлено: список разрешённых IP-адресов и стран для входа не охватывал переименованную страницу входа при установке в подкаталог.
- Исправлено: блокировка перечисления плагинов и тем не работала при установке в подкаталог, когда запрос доходил до PHP.
- Исправлено: примеры правил для Nginx и IIS, которые показываются для серверов, игнорирующих .htaccess, теперь включают путь установки, поэтому подходят и для установки в подкаталог.
- Исправлено: недопустимый пользовательский слаг страницы входа молча заменялся вместо того, чтобы быть отклонённым с сообщением, а на сайте, где слага ещё не было, он мог стать предсказуемым значением по умолчанию. Теперь значение отклоняется с сообщением, а прежний слаг сохраняется.
- Исправлено: если сохранённый секрет двухфакторной аутентификации больше не удавалось расшифровать (например, после ротации ключа безопасности), вход отклонялся даже с правильным паролем, и отключение двухфакторной аутентификации не помогало. Теперь переключатель 2FA полностью отключает проверку, а константа WORDSEC_DISABLE_2FA в wp-config.php даёт аварийный доступ.
- Исправлено: параметр «Скрыть ошибки входа» больше не заменяет сообщения об ошибках двухфакторной аутентификации и состояния сайта общим текстом о неверных учётных данных; маскируются только ошибки учётных данных.
- Улучшено: секреты двухфакторной аутентификации, сохранённые в старых форматах шифрования, теперь в фоновом режиме перешифровываются в текущий формат, поэтому будущая ротация ключа безопасности больше не может сделать их недействительными.
1.0.8
- Исправлено: усиление прав доступа к файлам могло сделать сайт недоступным. Оно устанавливало корневому .htaccess режим 0440, который лишает веб-сервер доступа на чтение на панелях хостинга, где веб-сервер работает от имени другого пользователя, чем владелец файла (Plesk, cPanel и подобные). После этого Apache отвечал на каждый запрос кодом 403 и записывал в журнал «AH00529 pcfg_openfile: unable to check htaccess file». Теперь корневому .htaccess устанавливается режим 0644, чтобы веб-сервер всегда мог его прочитать, а wp-config.php по-прежнему становится доступным только для чтения с режимом 0440. Затронутые сайты исправляются автоматически при следующем открытии страницы администратора с включённым параметром.
- Исправлено: сканер вредоносного ПО рекомендовал тот же режим 0440 для корневого .htaccess, поэтому «Исправить всё» (и плановые сканирования с автоматическим исправлением) могли применить его снова. Теперь сканер ожидает 0644 и вместо этого сообщает о проблеме, если веб-сервер не может прочитать .htaccess.
- Исправлено: проверка прав доступа к файлам на странице «Инструменты» указывала 0440 как рекомендуемый режим для .htaccess, а теперь рекомендует 0644.
- Исправлено: оценка безопасности больше не требует, чтобы файл .htaccess был недоступен для чтения веб-серверу; на оценку влияет только доступ на запись для группы или для всех.
1.0.7
- Исправлено: параметр «Предотвращение перечисления пользователей» больше не блокирует обычные страницы авторов. Блокируются только запросы по идентификатору (например, /?author=1, который WordPress преобразует в имя пользователя); посетитель, открывающий известный архив автора вида /author/name/, обслуживается как обычно. Конечная точка REST для пользователей и карта сайта пользователей остаются закрытыми, как и раньше.
- Исправлено: в диалоге сканера «Просмотреть совпавшее содержимое» поле с содержимым отображалось белым, пока была активна тёмная тема.
- Улучшено: страница блокировки, которая показывается заблокированным посетителям, содержит словесный знак WordSec со строкой «WordPress Security Plugin» под ним.
- Улучшено: экран блокировки, который выводит расширенная защита (firewall до загрузки WordPress), теперь полностью совпадает с тем, который выдаёт WordPress, вместо почти такой же копии с дополнительным кодом ошибки и строкой ссылки.
- Исправлено: удаление с вариантом «сохранить только лицензионный ключ» теперь сохраняет и идентификатор этого сайта, поэтому при переустановке используется существующая привязка лицензии, а сайт не регистрируется во второй раз.
1.0.6
- Новое: сканер теперь сообщает о неожиданных лишних файлах в папках плагинов и тем, размещённых на WordPress.org (файлы, не входящие в официальный выпуск). Такие файлы — распространённое место для скрытия подброшенных вредоносных нагрузок, не соответствующих ни одной сигнатуре. Находки поддерживают карантин и охватываются функцией «Исправить всё».
- Улучшено: восстановление файлов плагинов и тем теперь получает отдельный оригинальный файл напрямую из SVN WordPress.org (тот же канал, который уже используется для восстановления ядра) вместо загрузки и распаковки всего zip-архива плагина/темы; zip-пакет остаётся автоматическим запасным вариантом.
- Исправлено: восстановление плагинов и тем могло сообщать «возможно, плагин не размещён на WordPress.org» для плагинов, которые там размещены, поскольку шаг распаковки zip выполнялся без инициализированной файловой системы WordPress.
- Исправлено: темы по умолчанию, поставляемые с WordPress (например, Twenty Twenty-Five), больше не вызывают ложных находок «Изменённый файл темы». WordPress поставляет собственные сборки этих тем, которые могут побайтно отличаться от выпуска той же версии в каталоге тем; файлы, соответствующие официальным контрольным суммам ядра, теперь распознаются как подлинные.
- Улучшено: таблица «История сканирований» показывает полную разбивку по серьёзности (всего, критическая, высокая, средняя, низкая, информационная) при наведении на столбец «Найдено проблем».
1.0.5
- Исправлено: сканер вредоносного ПО больше не помечает собственные неизменённые файлы WordSec. Файлы, побайтно совпадающие с официальными контрольными суммами выпуска WordPress.org для установленной версии WordSec, исключаются из сопоставления с сигнатурами; изменённый или неизвестный файл по-прежнему не проходит проверку контрольной суммы и сканируется обычным образом.
1.0.4
- Новое: мастер настройки. Первая активация теперь открывает пошаговую управляемую настройку: выберите Рекомендуемую, Стандартную или полностью Пользовательскую конфигурацию для firewall, безопасности входа, блокировки и настроек, настройте CAPTCHA, двухфакторную аутентификацию, переименование URL входа и каналы доставки тревог и завершите шагом лицензии. Каждое изменение, касающееся передачи данных или файлов сервера, раскрывается до его применения, а мастер можно перезапустить в любое время из Настроек.
- Новое: выбор того, что произойдёт с вашими данными при удалении (сохранить всё, сохранить только лицензионный ключ или удалить всё), теперь предлагается в диалоге при деактивации плагина, в дополнение к существующему элементу управления в Настройках.
- Улучшено: обнаружение и производительность сканера вредоносного ПО.
- Улучшено: визуальные доработки по всему интерфейсу администратора.
- Исправлено: известные проблемы, о которых сообщалось после выхода 1.0.3.
1.0.3
- WordPress 6.9 теперь минимальная поддерживаемая версия.
- Пред-WordPress загрузчик WAF («Расширенная защита») больше не устанавливается при активации. Это явно подключаемая опция на странице Файрвол, которая перечисляет каждое вносимое ею изменение на сервере, и её отключение (или деактивация плагина) отменяет их все.
- Функции усиления безопасности, которые записывают в .htaccess, .user.ini или wp-config.php, меняют права доступа к файлам или удаляют файлы, теперь по умолчанию отключены, и описание каждого переключателя точно указывает, что он записывает.
- Деактивация теперь восстанавливает исходные отладочные константы wp-config.php и исходные права доступа к файлам, а также удаляет все файлы и директивы, добавленные плагином; удаление повторно выполняет эту очистку в качестве подстраховки.
- Резервная IP-геолокация и поиск сведений об IP в Живом трафике переключены с ip-api.com на ipwhois.io, всегда по HTTPS с проверкой сертификата, и каждый запрос теперь ограничен новой отключённой по умолчанию опцией «External IP Lookup Service» (Настройки Visitor IP Handling).
- Оценки репутации цепочки поставок теперь полностью работают без лицензионного ключа: публичные данные о плагинах/темах wordpress.org загружаются напрямую, когда зеркало сервиса недоступно.
- Диалог сведений об IP в Живом трафике показывает локальную статистику запросов (итоги, количество блокировок, уровень угрозы), даже когда внешние поиски отключены.
- Страница Настройки реорганизована: Usage Data перемещён наверх, параметры языка и интерфейса объединены в одну карточку Admin Interface, а раздел Visitor IP переименован в Visitor IP Handling.
- Описания на странице Инструменты теперь называют внешние сервисы, к которым обращается каждый инструмент (api.ipify.org, rdap.org и провайдеры списков блокировки DNS).
- Расширена документация по внешним сервисам: теперь перечислены провайдеры списков блокировки DNS, все хосты загрузки wordpress.org и сервис ipwhois.io.
- Исправлены некоторые известные ошибки.
- Внесены визуальные улучшения.
1.0.2
- Все функции теперь полностью работают локально без лицензионных ограничений.
- Исправлена ошибка в сканере вредоносного ПО.
- Данные времени выполнения (правила WAF, списки блокировки, GeoIP, карантин) теперь размещаются в папке uploads (uploads/wordsec).
- Дополнительные исправления расположения файлов/каталогов и соответствия рекомендациям wp.org.
1.0.1
- Встроенные скрипты/стили перенесены в API постановки в очередь WordPress.
- Усилена очистка входных данных при обработке запросов.
- Обновлены включённые библиотеки: ApexCharts 5.16.0, TCPDF 6.11.3.
- База данных GeoIP теперь хранится в wp-content/wordsec-data/ вместо папки плагина.
- Расширена документация по внешним сервисам в этом readme.
1.0.0
- Первый публичный релиз.
