Веб-сайти регулярно піддаються атакам, будь то DDoS, XSS, SQL-ін’єкції або просто набридливий спам. Блокування по User Agent через плагін Defender дозволяє захистити WordPress-сайт від запитів поганих роботів, що також дає можливість звільнити ресурси сервера для корисного трафіку. Плагін безкоштовний, він доступний на WordPress.org.
Що являє собою User Agent?
Почнемо з поняття з Вікіпедії:
User agent — ідентифікаційний рядок клієнтської програми, який використовує певний мережевий протокол; зазвичай використовується для програм, що здійснюють доступ до веб-сайтів – браузерів, пошукових роботів і павуків, мобільних телефонів та інших пристроїв з вбудованим доступом до веб-ресурсів.
Сервери, поштові клієнти, пошукові системи, веб-браузери – все це приклади користувачів агентів (User agent).
Якщо говорити простою мовою, то власний агент – це рядок, який ідентифікує клієнта для сервера.
Веб-браузери включають у свій HTTP-заголовок поле User-Agent, в якому міститься назва браузера, його версія та операційна система (наприклад, «Chrome Browser Version 94.0.4606.61 on Windows 10»).
Зазвичай користувач має наступний формат:
Mozilla/[ version ] ([ system and browser information ]) [ platform ] ([ platform details ]) [ extensions ]
У результаті кожен веб-браузер має власний user agent. Можна завжди перевірити його через послуги:

Ця інформація потрібна веб-серверу. Вона дозволяє веб-серверу передавати різні веб-сторінки для різних браузерів та різних ОС (наприклад, мобільні сторінки для мобільних браузерів, різні сторінки для різних платформ та ОС тощо; навіть можна вивести повідомлення «будь ласка, оновіть свій браузер» для застарілих версій).
Хороші боти vs погані боти
Більшість власників веб-сайтів хочуть, щоб їхній контент був доступний для пошуку в мережі, зокрема для пошукових систем, таких як Google.
Google автоматично виявляє і сканує веб-сайти, переходячи за посиланнями на веб-сторінках і використовуючи агенти, що називаються краулерами. Наприклад, основний краулер (пошуковий робот) Google називається Googlebot.
З цієї причини більшість власників веб-сайтів вважали б робота Googlebot хорошим і вітали б, щоб цей користувач агент відвідував їх веб-сайт.
Але не всі користувача агенти є хорошими.
Існують і небажані відвідувачі – спамери, скрапери, збирачі email, шкідливі роботи. Вони також можуть використовувати user agent’и.
Приклад XSS-атак
Ім’я користувача агента можна змінити, додавши до нього посилання зі шкідливим JS-кодом:
UserXagent:(Mozilla/5.0(!<script>alert('XSS(Example');(</script><!—
У результаті ми маємо проблему:
- Сервер довірятиме ім’я user agent і збереже вказаний вище рядок (наприклад, в інструменті веб-аналітики).
- Потім справжній користувач (наприклад, адміністратор) перетворюється на сервіс, що зберігає рядок.
- При відкритті сторінки з логами, що містять рядок, браузер отримує всі перераховані user agent’и та виконує скрипт. Цей скрипт може бути як простий редирект, так і спливаюче вікно.
Бан за User Agent у Defender дозволяє захиститися від XSS-атак. У такому разі завантаження сторінки буде припинено (якщо виявлено подібний user agent).
Приклад SQL-ін’єкцій
Тут все аналогічно до попереднього пункту. Ім’я User Agent може містити SQL-запит, наприклад, одинарну лапку (‘).
Якщо на сервері немає достатнього високорівневого захисту, такий запит приведе до помилки, після чого зловмисник може намагатись виконувати різні SQL-запити.
Отже, як можна допустити хороших роботів і запобігти поганим візитам?
Тут на допомогу приходить Defender.
Як налаштувати блокування за User Agent через Defender
Можливість User Agent Banning в Defender дозволяє задати дозволені та блоковані користувача агенти.
Щоб отримати доступ до цього функціоналу, необхідно перейти до розділу Defender > Firewall.

Клацаємо по кнопці Activate.

Тут ви можете назавжди заблокувати доступ до вашого сайту для шкідливих роботів та user agent’ів. Їх потрібно вводити у поле Blocklist (по одному на рядок). Defender за замовчуванням містить деякі роботи в чорному списку. Ви можете внести до цього списку та інших ботів, виконавши пошук у мережі за запитом «погані user agent».

Також ви можете додати і хороших ботів у полі Allowlist, щоб вони мали постійний доступ до вашого сайту. Defender включає за замовчуванням цілий ряд легітимних ботів і user agent’ів.

Примітка: якщо ви додаєте той же user agent в обидва поля, білий список буде в пріоритеті.
Розділ Message дозволяє налаштувати та переглянути повідомлення, яке буде виводитися на вашому сайті для заблокованих користувачів протягом періоду блокування.

Боти ідентифікуються за їх IP-адресою та User-Agent у HTTP-заголовку. Якщо User-Agent у HTTP-заголовку відсутня, це буде підозрілим сигналом. Найчастіше це вказує на SQL-ін’єкції. У цьому випадку найкраще заблокувати таку IP-адресу.
Ви можете блокувати будь-які IP-адреси, які передають POST-запити з порожніми заголовками referer та user agent. Робиться це у секції Empty Headers.

Примітка: спам-боти часто не мають referer або HTTP-заголовка, тому активація цієї опції дозволяє запобігти відправленню форм і коментарів зі спамом.
Ви можете легко деактивувати цю функцію будь-коли.

Не забудьте натиснути на кнопку Save, коли закінчите оновлювати параметри плагіна.
Щоб переглянути журнал активності Defender та переконатися, що функція працює та активна, виберіть Firewalls > Logs в меню плагіна.

Блокування User Agent через конфігураційний файл
За допомогою Defender можна додавати блокування User Agent у конфігураційний файл, щоб потім використовувати цей функціонал для необмеженої кількості сайтів.
Після активації User-Agent Banning ви зможете увімкнути цю опцію у всі свої конфіги.
Робиться це у розділі Settings > Configs в консолі Defender. У новому конфізі буде включено блокування User Agent.

Ви можете завантажити його та використовувати на будь-яких WordPress-сайтах.
Життя без спаму та ботів
Завдяки функціоналу User Agent Banning у Defender усі погані роботи обходитимуть ваш сайт стороною. Defender моментально приступає до захисту вашого сайту відповідно до ваших налаштувань блокування.
Defender безперервно відстежує ваш сайт, заощаджуючи ресурси сервера, що дозволяє підвищити продуктивність веб-сайту загалом.