#Что означает ошибка
Сайт взломан
Признаки взлома WordPress: редиректы на чужие сайты, незнакомые администраторы, спам в выдаче, файлы с странными именами, предупреждение браузера, письма от хостинга. Действовать нужно по плану: изолировать, очистить, закрыть дыру, сменить доступы.
Перед чисткой сделайте копию файлов и базы для анализа.
Не удаляйте логи.
При подозрении на взлом: сделайте резервную копию, смените все пароли, обновите ядро/плагины, проверьте файлы и пользователей и удалите вредоносный код.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Устаревший плагинУязвимость. | Реклама. | Обновите. |
| Слабый парольАдминка. | Доступ. | Смените. |
| Заражённые файлыКод. | Редиректы. | Очистите. |
| Нулленые темыВзлом. | Вирус. | Удалите. |
#Пошаговое решение
- Закройте сайт и сделайте копиюЕсли обнаружены подмены страниц, неизвестные администраторы или рассылка со взломанного сайта, сначала ограничьте доступ к сайту через панель хостинга или разрешённый режим обслуживания, сохранив доступ администратора и возможность расследования. Немедленно создайте полную копию файлов, базы данных и журналов в отдельное хранилище и запишите время инцидента. Не очищайте журналы и не удаляйте подозрительные файлы до сохранения копии.
- Смените все паролиС чистого устройства измените пароли хостинга, SSH/SFTP, WordPress, базы данных и связанных сервисов, включите двухфакторную аутентификацию там, где она поддерживается. В WordPress зайдите «Пользователи → Все пользователи» и проверьте неизвестных администраторов; подозрительные учётные записи сначала зафиксируйте, а блокируйте после сохранения свидетельств. Смена пароля базы потребует одновременного обновления
wp-config.php. - Переустановите ядро и плагиныНа отдельном стенде сравните файлы ядра WordPress с официальной версией; если доступен WP-CLI, из корня сайта выполните
wp core verify-checksums. Заменяйте повреждённое ядро, темы и плагины только чистыми пакетами из доверенных источников, предварительно сверив совместимость и сохранивwp-content/uploadsи содержимое базы. Не удаляйте рабочие пользовательские загрузки вместе с ядром. - Найдите вредоносный кодПросмотрите недавно изменённые PHP-файлы и подозрительные исполняемые файлы в
wp-content/uploads; с WP-CLI проверьте список администраторовwp user list --role=administratorи список активных расширений. Наличие PHP в uploads требует расследования, но не доказывает вредоносность само по себе. Сравнивайте файлы со штатной поставкой, а не удаляйте всё найденное поиском. - Обновите и защитите сайтПосле удаления подтверждённого вредоносного кода обновите WordPress, расширения и тему, замените ключи безопасности WordPress штатным способом и настройте резервное копирование. Проверьте задания cron, дополнительные точки входа, правила веб-сервера и пользователей базы. Затем снова включите сайт, проверьте журналы и повторное появление подозрительных файлов; при компрометации серверного администратора требуется переустановка из доверенного образа.
#Если не помогло
Не используйте «нулленые» темы и плагины — они часто содержат вредоносный код.
#Изоляция и копия
Включите режим обслуживания или закройте сайт. Скачайте копию файлов и БД. Смените пароли: хостинг, FTP/SFTP, SSH, база данных, WordPress-админы, почта. Включите двухфакторную защиту. Сообщите хостингу.
#Поиск вредоносного кода
Замените ядро, плагины и темы чистыми копиями: wp core download --force --skip-content, wp plugin install имя --force. Для проверки: wp core verify-checksums и wp plugin verify-checksums --all. Ищите подозрительный код: grep -rE "eval\(base64_decode|gzinflate|str_rot13" wp-content. Проверьте wp-content/uploads на PHP-файлы: find wp-content/uploads -name "*.php". Просмотрите wp user list --role=administrator.
#Закрытие уязвимости
Обновите WordPress, плагины и темы, удалите неиспользуемые и «nulled»-плагины. Смените соли в wp-config.php (). Установите права 755/644. Включите WAF и резервные копии. Проверьте сайт в Google Search Console и запросите повторную проверку, если пришло предупреждение.
wp core verify-checksumswp plugin verify-checksums --allfind wp-content/uploads -name "*.php"wp user list --role=administrator