Перейти к содержимому
Leonidov.DEV

Плагин безопасности WordPress: зачем я написал свой

Безопасность
Плагин безопасности WordPress: зачем я написал свой

Десять лет brute-force атак, фейковых роботов и логов размером больше базы. В какой-то момент выбор стал простым: свой плагин безопасности или продолжать настраивать чужой или написать слой, который мне нужен.

Что я хотел

Фильтрацию до запуска WordPress. Журнал, который читает человек. Никакого баннера с апселлом в админке. Никакой зависимости от облака для решения, которое можно принять на сервере. Эти четыре требования отсекли большую часть рынка.

От чего отказался

От расползания функций. Плагин безопасности, который ещё делает бэкапы, SEO и попапы, получает три новых способа сломаться. Я держал узкий объём: запросы, боты, вход, логи.

Пять уроков

  1. Ранняя фильтрация лучше умной. Запрос, отклонённый до PHP, почти ничего не стоит.
  2. Логи решают, сможете ли вы настроить систему в три часа ночи.
  3. Ложные срабатывания - главный враг: один заблокированный checkout дороже сотни ботов.
  4. У каждой функции должен быть выключатель и белый список.
  5. Поддержка и есть продукт. Инструмент безопасности, который перестал обновляться, становится уязвимостью.

Чем это стоит

Временем. Обновления, совместимость с кэшем и CDN, новые паттерны ботов, поддержка. Свой плагин не бесплатен потому, что вы его написали; он бесплатен до первого релиза WordPress, который его сломает.

Когда брать готовый

Если нужен один защищённый сайт и нет особых требований, берите поддерживаемый плагин с понятным changelog. Свой пишите, когда требование специфическое, вы можете его обслуживать и вам нравится эта задача. Иначе вы покупаете вторую работу.

Прежде чем писать свой

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

Три вопроса, которые задают

Свой плагин безопаснее? Только пока его поддерживают. Заброшенный свой хуже поддерживаемого чужого.

Можно ставить клиентам? Только с планом поддержки и описанным процессом обновлений.

Как часто он меняется? Так же часто, как WordPress и трафик ботов. Код безопасности не бывает готовым.

Я написал свой, потому что хотел эту работу. Это единственная честная причина начинать.

Как я проверяю релиз

Каждый релиз проходит один список: чистый WordPress, страница из кэша, оформление заказа, вход с неверным паролем, известный User-Agent бота и живой браузер. Если правило ломает что-то из первых четырёх, релиз не выходит. Список лежит в репозитории, а не в голове.

Что вне объёма

Бэкапы, чистка после заражения, SEO и скорость сайта. Плагин безопасности, который делает всё, становится тем, что ломает всё. Границу держу и говорю клиентам, где брать остальное.

Что сделал бы иначе

Начал бы с логов, а не с правил. Первая версия блокировала лишнее, а логи были нечитаемыми. Неделя наблюдения без блокировок сэкономила бы два релиза.

Когда свой плагин безопасности оправдан

Свой плагин безопасности оправдан, когда разрыв структурный: запросы, которые надо отбрасывать до PHP, логи, которые читаются в три ночи, правила, переживающие обновление. Для обычного сайта поддерживаемый плагин дешевле. Каталог плагинов WordPress - место, с которого стоит начать.

Цена своего плагина - не код, а поддержка: обновления ядра, новые сигнатуры ботов, совместимость с кешем и CDN. Если этого некому делать, через год получится дыра с логотипом. Поэтому свой слой я пишу только там, где готов отвечать за него сам. Остальное закрывают проверенные плагины.

И документация: без неё поддерживать этот слой будет некому.

И тесты: без них патч ломает защиту тихо.

Каждое правило придётся кому-то отлаживать в три ночи.

Ещё по теме: Лучший плагин безопасности для WordPress: на что смотреть и BotBlocker Security: WAF, который включается раньше WordPress.