Каждый день в мире взламывают тысячи сайтов. Большинство из них — не банки и не госструктуры, а обычные бизнес-сайты, интернет-магазины, блоги. Хакерам не нужны ваши данные — им нужен ваш сервер: для рассылки спама, майнинга криптовалюты, DDoS-атак или размещения фишинговых страниц.

Я занимаюсь защитой сайтов давно и вижу одни и те же ошибки. Расскажу, что нужно сделать, чтобы ваш сайт не стал лёгкой мишенью.

Базовые меры: обязательный минимум

1. Обновляйте CMS и плагины

Самая частая причина взлома — устаревшее ПО. Уязвимость обнаруживают, публикуют патч, а владельцы сайтов его не ставят. Хакеры берут список известных уязвимостей и сканируют интернет — находят тысячи незакрытых сайтов.

WordPress: обновления безопасности выходят каждые 2-3 недели. Плагины — ещё чаще. Критичные уязвимости в популярных плагинах (Elementor, WooCommerce, Yoast) — не редкость.

MODX: обновления реже, но когда выходит патч безопасности — ставить нужно немедленно. MODX-сообщество меньше, и уязвимости закрываются не так быстро.

Правило: обновления безопасности — в течение 24 часов. Мажорные обновления — после тестирования.

2. Сильные пароли и 2FA

Звучит банально, но до сих пор вижу:

  • Пароль admin123 на админке
  • Один пароль для всего: хостинг, CMS, почта, FTP
  • Логин admin (первое, что перебирают боты)

Что делать:

  • Уникальный пароль от 16 символов на каждый сервис
  • Менеджер паролей (Bitwarden, 1Password)
  • Двухфакторная аутентификация на админку CMS и хостинг
  • Смена стандартного логина admin

3. Ограничьте доступ к админке

  • Смените стандартный URL админки (для WordPress — wp-login.php и wp-admin)
  • Ограничьте вход по IP, если работаете из офиса
  • Установите лимит на количество попыток входа — 5 неудачных = блокировка на час
  • Капча на форму логина

4. HTTPS везде

SSL-сертификат — не про SEO (хотя и про это тоже). Без HTTPS данные между браузером и сервером передаются открытым текстом. Включая пароли.

Let’s Encrypt — бесплатно. Нет причин не настроить.

5. Резервные копии

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

Продвинутые меры

6. Web Application Firewall (WAF)

WAF фильтрует входящий трафик и блокирует вредоносные запросы до того, как они достигнут сайта:

  • SQL-инъекции
  • XSS-атаки (межсайтовый скриптинг)
  • Попытки загрузки shell-скриптов
  • Подозрительные боты

Варианты:

  • CloudFlare — бесплатный план закрывает базовые угрозы. Pro ($20/мес) — серьёзная защита.
  • Sucuri — специализируется на WordPress. Включает WAF + мониторинг + очистку.
  • ModSecurity — серверный WAF, бесплатный, но требует настройки.

7. Права доступа на файлы

Неправильные права — классическая уязвимость:

  • Директории: 755 (чтение и выполнение для всех, запись — только владельцу)
  • Файлы: 644 (чтение для всех, запись — только владельцу)
  • Конфигурационные файлы (wp-config.php, .env): 600 (только владелец)
  • Директория uploads: нет права на выполнение PHP

Если хакер загрузит PHP-файл в /uploads/ и сможет его выполнить — это конец. Запрет выполнения PHP в директориях загрузки — обязательная мера.

8. Мониторинг изменений файлов

Хакеры часто модифицируют существующие файлы или добавляют новые. Мониторинг файловой системы позволяет обнаружить это быстро:

  • Сравнение хешей файлов с эталоном
  • Уведомление при изменении ядра CMS или конфигурации
  • Отслеживание новых PHP-файлов в нетипичных директориях

Для WordPress — Wordfence делает это из коробки. Для остальных CMS — серверные инструменты (AIDE, OSSEC, Tripwire).

9. Ограничение API и XML-RPC

WordPress по умолчанию открывает XML-RPC (xmlrpc.php) — его используют для брутфорса и DDoS-усиления. Если не нужен — отключить.

REST API тоже может утекать информацию: список пользователей, содержимое постов. Ограничьте доступ к эндпоинтам, которые не используются.

10. Безопасность сервера

CMS — не единственная точка входа:

  • SSH — ключи вместо паролей, нестандартный порт, fail2ban
  • FTP — лучше вообще отключить. Используйте SFTP или SSH
  • Панель управления хостингом — сильный пароль + 2FA
  • PHP — отключить опасные функции (exec, system, passthru), ограничить open_basedir
  • MySQL — не давать root-доступ приложению, использовать отдельного пользователя с минимальными правами

Типовые уязвимости, которые я встречаю

SQL-инъекции

Когда пользовательский ввод попадает в SQL-запрос без фильтрации. Хакер вводит SQL-код вместо имени — и получает доступ к базе. Решение: подготовленные запросы (prepared statements) и ORM.

XSS (межсайтовый скриптинг)

Хакер внедряет JavaScript в страницу сайта (через комментарии, формы, URL). Скрипт крадёт cookies или перенаправляет пользователей. Решение: экранирование вывода, Content Security Policy.

Загрузка файлов

Пользователь загружает «картинку», которая на самом деле PHP-скрипт. Решение: проверка MIME-типа, запрет выполнения PHP в директориях загрузки, переименование файлов.

Подбор паролей (брутфорс)

Боты перебирают пароли к админке. Тысячи попыток в минуту. Решение: лимит попыток, 2FA, капча, нестандартный URL логина.

Что делать, если сайт уже взломали

Не паникуйте, но действуйте быстро:

  1. Не удаляйте файлы. Они нужны для анализа — как именно проникли.
  2. Отключите сайт (maintenance mode или заглушка) — чтобы не навредить посетителям.
  3. Сделайте полную копию заражённого сайта — для расследования.
  4. Определите точку входа — какая уязвимость использована, когда произошёл взлом.
  5. Восстановите из чистого бэкапа — того, что был до взлома.
  6. Закройте уязвимость — иначе взломают снова через 5 минут.
  7. Смените все пароли — CMS, хостинг, FTP, база данных, почта.
  8. Проверьте соседние сайты — если на одном хостинге несколько сайтов, могли добраться до всех.

Это кропотливая работа. Если не уверены — лучше обратиться к специалисту. Защита и восстановление сайтов — одна из моих специализаций.

Чек-лист: минимальная защита сайта

  • ✅ CMS и плагины обновлены до последней версии
  • ✅ Уникальные сильные пароли + 2FA
  • ✅ Стандартный URL админки изменён
  • ✅ Лимит попыток входа
  • ✅ HTTPS настроен
  • ✅ Ежедневные бэкапы на внешнем хранилище
  • ✅ Правильные права на файлы (644/755)
  • ✅ Запрет выполнения PHP в uploads
  • ✅ XML-RPC отключен (WordPress)
  • ✅ Мониторинг изменений файлов
  • ✅ WAF настроен

Каждый пункт — это закрытая дверь для хакера. Чем больше дверей закрыто — тем выше порог входа. Хакеры идут по пути наименьшего сопротивления: если ваш сайт защищён лучше соседнего — атакуют соседний.

Итого

Безопасность — не одноразовое действие, а процесс. Базовые меры занимают пару часов и закрывают 90% угроз. Продвинутые — требуют экспертизы, но поднимают защиту на порядок.

Если не хотите разбираться сами — это нормально. Для этого есть техподдержка, где безопасность входит в обслуживание. Или разовый аудит безопасности — проверю ваш сайт и закрою дыры.

Автор материала

Антон Ветров Разработка сайтов, поисковая доступность, автоматизация и эксплуатация.