Мы сделали плагин, который блокирует вход в WordPress через Google. WooCommerce, кажется, не обиделся
В прошлой статье я написал про риск для владельцев WordPress-сайтов: сайт может годами жить своей жизнью, принимать пользователей, создавать личные кабинеты, подключать WooCommerce, ставить social login, а владелец уже давно не помнит, какие способы входа там реально работают.
Изначально я слишком упростил мысль: мол, проблема в иностранных e-mail вроде Gmail.
В комментариях мне быстро накидали, и правильно сделали. Сам по себе e-mail в базе сайта не обязательно является проблемой. Пользователь мог просто указать его как контактный адрес или использовать как логин в собственной системе сайта.
Другое дело, если пользователь заходит через внешний иностранный сервис: Google, Apple, Facebook, Microsoft и так далее. Вот там уже важен не сам адрес gmail.com, а механизм авторизации.
То есть бороться нужно не с буквами Gmail в поле e-mail, а с внешней авторизацией.
После комментариев стало понятно: нужен не “запретитель Gmail”, а нормальный технический фильтр для WordPress. Чтобы владелец сайта хотя бы видел и контролировал, через что к нему пытаются входить пользователи.
Что сделали
Мы собрали плагин для WordPress:
RU Auth Compliance Guard
Его задача простая: контролировать внешние способы авторизации.
Плагин не запрещает обычный вход по e-mail и паролю.Не ломает стандартную регистрацию WordPress.Не мешает WooCommerce работать с обычными покупателями.Не пытается решать юридические вопросы вместо владельца сайта.
Он делает более узкую вещь: отслеживает попытки входа через внешних провайдеров и блокирует тех, кто находится в списке блокировки.
Например: Google, Apple, Facebook, Microsoft, GitHub и другие.
Если пользователь входит обычным способом, через логин/e-mail и пароль, всё работает. Если используется страница WooCommerce “Мой аккаунт”, она тоже открывается. Если же в URL или запросе видны признаки внешней авторизации через Google, такая попытка останавливается.
Именно это и хотелось получить: не рубильник “сломать весь вход”, а аккуратный фильтр на уровне сценариев авторизации.
Где скачать
Плагин можно скачать в моём Telegram-канале:
Там же будет лежать:
- архив плагина для установки в WordPress;
- инструкция;
- чек-лист проверки;
- ТЗ на разработку;
- описание логики и сценариев.
Предыдущая статья, из-за которой всё это началось:
Делали вместе с Codex
Плагин разрабатывался вместе с Codex.
Не в смысле “нажал кнопку и получил идеальный продукт”. Так это не работает. Особенно с WordPress, где любой тест быстро превращается в набор вопросов: какая тема, какой плагин логина, есть ли WooCommerce, кто перехватывает /my-account/, почему архив не ставится, почему хук сработал раньше, чем ожидалось.
Codex помогал:
- проектировать логику;
- писать код;
- собирать архив;
- проверять установку;
- гонять тесты на WordPress;
- отдельно смотреть WooCommerce;
- ловить ошибки упаковки;
- оформлять документацию;
- приводить всё к виду, который можно отдать людям.
Отдельно я подготовил ТЗ. Его можно забрать и использовать как основу, если хотите повторить идею, адаптировать под свой проект или заказать похожий плагин у разработчика.
Что умеет плагин
Главная функция: блокировка внешней авторизации через провайдеров из списка блокировки.
По умолчанию в список добавлены:
- Google;
- Apple;
- Facebook / Meta;
- Microsoft;
- GitHub;
- Twitter / X;
- LinkedIn;
- Amazon;
- Yahoo;
- Discord;
- Slack;
- Dropbox;
- PayPal.
Список можно менять.
Есть и список разрешённых провайдеров. Например, если владелец сайта использует российский сервис авторизации и считает его подходящим для своего сценария, его можно добавить в исключения.
Важный момент: плагин не является юридической экспертизой. Он не говорит: “Теперь у вас всё точно законно”. Это технический инструмент. Он помогает найти и ограничить спорные сценарии авторизации, но окончательное решение по конкретному сайту всё равно принимает владелец или юрист.
Как выглядит админка
В WordPress появляется отдельный пункт:
Контроль авторизации
Внутри четыре вкладки.
ОбзорСтатистика, режим работы, последние срабатывания.
ЖурналЧто было заблокировано, какой провайдер определён, почему сработала блокировка.
НастройкиСписки провайдеров, режимы работы, исключения.
ИнструментыРучная проверка URL. Удобно для тестов: вставил адрес, посмотрел, что плагин с ним сделает.
Как работает блокировка
Плагин смотрит не на e-mail пользователя, а на признаки внешней авторизации.
Например, если запрос похож на:
/wp-login.php?loginSocial=google
или:
/my-account/?provider=google
плагин понимает: это не обычная форма входа по паролю, а попытка входа через внешнего провайдера.
Если этот провайдер находится в списке блокировки, запрос останавливается. Пользователь видит сообщение, что авторизация через этот внешний сервис недоступна.
Обычная форма входа WordPress при этом продолжает работать.
В этом и была основная идея: не запрещать e-mail, не ломать регистрацию, а ловить именно тот сценарий, где в авторизацию включается внешний сервис.
Почему это вообще нужно
WordPress живёт за счёт плагинов. Это его сила и его вечный цирк с конями.
Сегодня у вас обычный сайт со статьями.
Завтра вы поставили WooCommerce.
Потом добавили личный кабинет.
Потом кто-то подключил social login, потому что “пользователям удобнее входить через Google”.
Через год уже никто не помнит, кто это ставил, зачем ставил и где это выключается. Но кнопка “Войти через Google” где-то живёт. Иногда даже бодро живёт.
Проблема в том, что ответственность обычно остаётся не на фрилансере, который когда-то поставил плагин, а на владельце сайта.
Поэтому мне и хотелось сделать не теоретическую статью про “проверьте настройки”, а инструмент, который можно поставить и посмотреть, что реально происходит.
Проверяли с WooCommerce
WooCommerce проверяли отдельно.
Потому что если плагин безопасности ломает магазин, это уже не плагин безопасности, а генератор утренней паники.
Что проверялось:
- главная страница сайта;
- стандартный вход WordPress;
- страница WooCommerce “Мой аккаунт”;
- корзина;
- оформление заказа;
- обычный вход клиента;
- служебные запросы WooCommerce;
- попытка авторизации через Google.
Обычный вход WooCommerce не блокируется.
А вот URL с внешним провайдером, например Google, блокируется.
Это нужное поведение: покупатель может войти по e-mail и паролю, но не через провайдера, которого владелец сайта добавил в список блокировки.
Как протестировать у себя
После установки я бы проверял так.
1. Обычный вход WordPress
Открыть:
/wp-login.php
Попробовать войти обычным пользователем.
Если обычный вход сломался, значит что-то пошло не так. Плагин не должен мешать стандартной авторизации.
2. Блокировка Google
Открыть тестовый URL:
/wp-login.php?loginSocial=google
Ожидаемый результат: блокировка.
3. Разрешённый провайдер
Например:
/wp-login.php?provider=esia
Если такой провайдер добавлен в список разрешённых, плагин должен показать, что URL проходит проверку.
4. WooCommerce
Если WooCommerce установлен, открыть:
/my-account/
Страница аккаунта должна открываться.
Потом проверить:
/my-account/?provider=google
Такой URL должен блокироваться.
5. Журнал
После тестов зайти в админку плагина и открыть вкладку “Журнал”.
Там должно быть видно:
- что заблокировано;
- какой провайдер определён;
- почему сработала блокировка.
Без журнала владелец сайта снова оказывается в классической WordPress-ситуации: “что-то где-то не работает, но зато интересно”.
Что с безопасностью самого плагина
Я отдельно смотрел, чтобы плагин не стал новой проблемой.
Что сделано:
- нет eval;
- нет shell-команд;
- нет выполнения произвольного кода;
- настройки доступны только администратору;
- формы админки защищены стандартными проверками WordPress;
- полный URL с параметрами не сохраняется в журнал как есть;
- raw IP-адреса в журнал не выводятся;
- обычный вход по паролю не трогается;
- WooCommerce не ломается.
Плагин не претендует на роль “абсолютной защиты от всего”. Это не межгалактический щит и не юридический амулет.
Но как технический слой контроля внешней авторизации он вполне полезен.
Почему не просто удалить social login
Можно и удалить.
Если вы точно знаете, где он стоит.
Если знаете, какой плагин его добавляет.
Если уверены, что завтра другой администратор не поставит новый.
Если тема не содержит встроенную кнопку.
Если WooCommerce-расширение не добавит свой способ входа.
Если сайт небольшой, понятный и свежий.
Но в реальности WordPress часто похож на антресоль: вроде всё своё, но откуда взялись три одинаковых кабеля, старый роутер и плагин 2017 года, никто уже не помнит.
Поэтому защитный слой полезен. Он не заменяет уборку, но помогает не наступить на грабли, пока вы эту уборку делаете.
Что внутри ТЗ
Для тех, кто хочет повторить или адаптировать решение, я подготовил отдельное ТЗ.
Там расписано:
- что должен делать плагин;
- какие провайдеры учитывать;
- как определять внешний сервис авторизации;
- как вести журнал;
- какие настройки нужны;
- как тестировать WordPress;
- как тестировать WooCommerce;
- как не положить сайт;
- какие данные не стоит сохранять в логах;
- какие внутренние технические детали не нужно выносить в пользовательскую документацию.
ТЗ можно забрать в Telegram-канале вместе с плагином.
Что дальше
Если у вас обычный информационный сайт без регистрации, личного кабинета, WooCommerce и внешних способов входа, возможно, вам всё это вообще не нужно.
Если у вас есть пользователи, аккаунты, магазин, курсы, закрытые материалы или кнопки входа через внешние сервисы, лучше проверить.
Потому что WordPress сам по себе не скажет:
“Эй, тут у тебя вход через Google, а это может быть риск”.
WordPress обычно говорит другое:
“Обновите 14 плагинов. Удачи”.
Скачать
Скачать плагин, инструкцию и ТЗ можно в Telegram-канале:
Предыдущая статья: