Каждый день в мире взламывают тысячи сайтов. Большинство из них — не банки и не госструктуры, а обычные бизнес-сайты, интернет-магазины, блоги. Хакерам не нужны ваши данные — им нужен ваш сервер: для рассылки спама, майнинга криптовалюты, 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 логина.
Что делать, если сайт уже взломали
Не паникуйте, но действуйте быстро:
- Не удаляйте файлы. Они нужны для анализа — как именно проникли.
- Отключите сайт (maintenance mode или заглушка) — чтобы не навредить посетителям.
- Сделайте полную копию заражённого сайта — для расследования.
- Определите точку входа — какая уязвимость использована, когда произошёл взлом.
- Восстановите из чистого бэкапа — того, что был до взлома.
- Закройте уязвимость — иначе взломают снова через 5 минут.
- Смените все пароли — CMS, хостинг, FTP, база данных, почта.
- Проверьте соседние сайты — если на одном хостинге несколько сайтов, могли добраться до всех.
Это кропотливая работа. Если не уверены — лучше обратиться к специалисту. Защита и восстановление сайтов — одна из моих специализаций.
Чек-лист: минимальная защита сайта
- ✅ CMS и плагины обновлены до последней версии
- ✅ Уникальные сильные пароли + 2FA
- ✅ Стандартный URL админки изменён
- ✅ Лимит попыток входа
- ✅ HTTPS настроен
- ✅ Ежедневные бэкапы на внешнем хранилище
- ✅ Правильные права на файлы (644/755)
- ✅ Запрет выполнения PHP в
uploads - ✅ XML-RPC отключен (WordPress)
- ✅ Мониторинг изменений файлов
- ✅ WAF настроен
Каждый пункт — это закрытая дверь для хакера. Чем больше дверей закрыто — тем выше порог входа. Хакеры идут по пути наименьшего сопротивления: если ваш сайт защищён лучше соседнего — атакуют соседний.
Итого
Безопасность — не одноразовое действие, а процесс. Базовые меры занимают пару часов и закрывают 90% угроз. Продвинутые — требуют экспертизы, но поднимают защиту на порядок.
Если не хотите разбираться сами — это нормально. Для этого есть техподдержка, где безопасность входит в обслуживание. Или разовый аудит безопасности — проверю ваш сайт и закрою дыры.