Безопасность сайта на WordPress: угрозы и базовый чеклист

WordPress — бесплатная open source CMS. Её можно ставить, править и раздавать как угодно. Из-за популярности и открытой архитектуры дыры в ядре, темах и плагинах быстро становятся массовой проблемой: один баг — и под ударом оказываются тысячи сайтов.

Цифры из исходного материала (на момент написания заметки): в зоне RU на WordPress уже тогда держалась заметная доля новых сайтов, в каталоге плагинов — десятки тысяч расширений. При этом защитными плагинами пользовалась лишь небольшая часть владельцев. Открытость — плюс для разработки и минус, если админка и обновления заброшены.

Что считать безопасностью сайта

Под безопасностью обычно имеют в виду два слоя. Первый — не дать внедрить код (бэкдоры, подмена страниц, кража контента и базы). Второй — не дать заспамить формы, комментарии и обратную связь. Спам бесит, но взлом кода бьёт сильнее: от «тихой» кражи до полного угона сайта.

Сложность в том, что угрозы меняются, а факт взлома не всегда виден без логов, сканеров и контроля целостности файлов. Сайт может «работать», а в теме уже лежат веб-шеллы.

Типичные векторы атак

  • SQL Injection — подстановка SQL через параметры URL или формы, если ввод не экранируют.
  • XSS — внедрение скрипта через поля ввода и вывод без очистки.
  • Загрузка файла — вредоносный PHP/скрипт через уязвимую форму upload.
  • CSRF — запрос от имени залогиненного админа без его ведома.
  • Brute force — перебор логина и пароля к wp-login / xmlrpc.
  • DoS / DDoS — перегрузка трафиком с одного или многих источников.
  • Open Redirect — редирект на фишинговый URL.
  • Фишинг — поддельные страницы «как ваш сайт» для сбора паролей.
  • Malware — вредоносные скрипты в теме, плагине или uploads.
  • LFI / RFI — подключение локального или удалённого файла с кодом атакующего.
  • Обход аутентификации и RCE — вход мимо формы или выполнение кода на сервере.
  • SSRF, XXE, directory traversal — запросы сервера «не туда», разбор XML, обход каталогов.
  • Перечисление пользователей — через ?author=N и похожие приёмы для последующего brute force.

Откуда чаще всего «пробивают» WordPress

  • Около 40% — сторона хостинга (слабая изоляция, чужие аккаунты, дыры панели). Выбирайте провайдера с нормальной репутацией и обновлениями.
  • Около 30% — кривые или заражённые темы. Берите темы с понятным автором и обновлениями; нулевые «nulled»-пакеты — лотерея с бэкдором. Ориентир по нормальным продуктам: темы и плагины WPShop.
  • Остальное — устаревшие плагины, слабые пароли, открытый xmlrpc, лишние учётки, отсутствие 2FA.

Базовый чеклист защиты

  • Обновляйте ядро, темы и плагины. Неиспользуемое — удаляйте, не «выключайте и забывайте».
  • Сильные уникальные пароли + 2FA на админов. Не используйте логин admin.
  • Ограничьте попытки входа (limit login / firewall), при возможности закройте xmlrpc, если он не нужен.
  • Права на файлы: конфиги и PHP не должны быть world-writable; uploads — без исполнения PHP, если хостер позволяет.
  • Регулярные бэкапы (файлы + БД) с проверкой восстановления, не только «галочка в панели».
  • WAF / security-плагин (Wordfence, Sucuri и аналоги) + мониторинг изменений файлов.
  • HTTPS везде, актуальные сертификаты, без mixed content.
  • Минимум плагинов «на всякий случай». Каждый плагин — поверхность атаки.

Если сайт уже «странный»

Смените все пароли (WP, FTP/SFTP, БД, хостинг-панель), проверьте users и свежие плагины/темы, просканируйте файлы, сравните с чистым бэкапом, посмотрите access/error-логи. Иногда быстрее поднять чистую копию из бэкапа и перенести только проверенный контент, чем неделю вычищать шеллы.

Безопасность WordPress — не разовая «установка антивируса», а привычка: обновления, бэкапы, минимум лишнего, контроль доступов. Без этого даже хороший хостинг не спасёт.

Источники и ссылки


Комментарии загружаются…