• XSS.stack #1 – первый литературный журнал от юзеров форума

Стата с маслом

TrueUser

(L1) cache
Пользователь
Регистрация
13.07.2009
Сообщения
540
Реакции
2
Приветствую вас, читатели DaMaGeLab! Сегодня я подготовил для вас
одну интересную тему. Может быть это будет некоторым продолжением
предыдйщей моей статьи про хостинг, а может и не очень, все зависит от
того с какой стороны смотреть, ну ладно, хватит лирики.
Собственно идея написания:
Всем известен замечательный факт - стата вещь очень полезная.
Однако не всегда мы можем воспользоваться серверной статистикой
того хостинга, где располагается наш софт. Это касается в том числе
и вопроса о микросвязках, к которому планирую вернуться в ближайшее время.
Можно конечно навертеть своей статистики, пользуюя файлы или там мускул, но...
Это не всегда оправдано, да и не факт что хостинг располагает интерпретатором
PHP (да представьте себе такое бывает :)) Не будем вдваться в подробные изыскания
на тему "а накой хрен оно нам надо", я думаю если направить некоторое количество
оставшихся в черепной коробке серого вещества на данную тему, то ответ придет сам.
Давайте рассмотрим, например, микросвязку, установленную на донор-сервере.
Если мы вставим в индекс какую либо ссылку на наш модуль статистики (каков бы он ни был),
то создадим совершенно ненужную нагрузку на наш evil хост, да и идея микросвязки от
этого серьезно пострадает.
Ну так вот, предлагаю следующее решение (каюсь, в некотором роде подсмотрел у
мегапрограммеров из страны восходящего солнца):
мы будем пользовать модули статистики, в ассортименте представленные на просторах
сети.

Итак, что же нам потребуется?
1. Код, встраиваемый в индекс на донор-сервере, не вызывающий подозрений у
юзеров/админов.
2. Скрипт (админка) для отображения статы посещений донор-сервера, возможно
скрещенная со статистикой обращений к скрипту лоадеру нашего мега троя/лодыря.
В качестве примера я решил заюзать очень распространенный модуль
Liveinternet.ru. Не спрашивайте меня почему именно этот - просто под руку попался.

Если мы ознакомимся с правилами предоставления услуг статы, то заметим несколько
неприятных моментов: идет привязка к доменному имени и за инвизибл счетчик надо
ПЛАТИТЬ денушку.
По большому счету нас ни то ни другое не устраиват, что же, давайте со свойственным
нам энтузиазмом порвем в клочья надежду статистов заработать на нас :)

Во первых разделаемся с привязкой к доменному имени.
если проанализировать предлагаемый нам код счетчика:
Код:
<!--LiveInternet counter--><script type="text/javascript"><!--
document.write("<a href='http://www.liveinternet.ru/click' "+
"target=_blank><img src='http://counter.yadro.ru/hit?t38.6;r"+
escape(document.referrer)+((typeof(screen)=="undefined")?"":
";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?
screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+
";"+Math.random()+
"' alt='' title='LiveInternet' "+
"border='0' width='31' height='31'><\/a>")
//--></script><!--/LiveInternet-->
То можно выделить там волшебные параметры, передаваемые GET запросом:
1. r = escape(document.referrer);
2. u = escape(document.URL)
Реф нас не очень то интересует, а вот document.URL... мы просто можем затолкать туда
любой, зашифровав его от пытливых глаз пользователей (это уже без меня).

Ну и, наконец, width='31' height='31' это дофига, пускай габариты будут равны нулю.
Итак мы получили код счетчика, который невидим, и привязан к нужному домену
нафига платить 3 бакса в месяц? Лучше попейте пива на них :).
Код:
<script type="text/javascript">
document.write("<img src='http://counter.yadro.ru/hit?t38.6;r"+
escape(document.referrer)+((typeof(screen)=="undefined")?"":
";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?
screen.colorDepth:screen.pixelDepth))+";u"+escape(http://evelhost.ru)+
";"+Math.random()+
"border='0' width='0' height='0'><\/a>")
</script>
Теперь озадачимся вопросом об получении информации с сервера ЖивогоИнтернета.
Я хочу предложить вам несложный скрипт на PHP, который может лежать где угодно
лишь бы интерпретатор был влюблен в curl и варил perl-совместимые регэкспы.
Код:
<?php
// Производим настройку на сайт
$site_url = 'http://evilhost.ru';
$site_pass = 'pass';
$date = '2009-08-12';

// Делаем запрос
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.liveinternet.ru/stat/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "url=" . urlencode($site_url) . "&password=" . urlencode($site_pass));
preg_match('|<A HREF="(.+)">|U', curl_exec($curl), $matches);
curl_setopt($curl, CURLOPT_URL, $matches[1] . ';lang=en;date=' . $date);
curl_setopt($curl, CURLOPT_POST, 0);
curl_close($curl);
preg_match_all('|<td>.+</td>|U', curl_exec($curl), $matches);

// Выводим полученные данные
echo 'Pageviews: ' . $matches[0][7] . '
';
echo 'Sessions: ' . $matches[0][12] . '
';
echo 'Visitors: ' . $matches[0][22] . '
';
echo 'Hosts: ' . $matches[0][27] . '
';
?>
Все просто как грабли, к тому же позволяет прикрыть от пытливых глаз вашу
стату под паролем на LiveInternet. Если развивать тему, то к этому
скрипту можно прикрутить очень много всяких фич (начиная от графиков самопальных
и заканчивая полноценной безмускульной админкой с подсчетом инсталлов и
процента пробива) все зависит от прымоты рук кодера.
Если кто возьмет методику на вооружение - рекомендую парсить выдачу
статы для версии PDA - это позволит уменьшить траф и увеличить быстродействие.

Всем удачи! Мои бредовые записки специально для DaMaGeLab!
 
Все просто как грабли, к тому же позволяет прикрыть от пытливых глаз вашу
стату под паролем на LiveInternet.

http://counter.yadro.ru/logo;inattack.ru?29.1

вместо инаттак подставляем любой другой адрес
 
http://counter.yadro.ru/logo;inattack.ru?29.1

вместо инаттак подставляем любой другой адрес
Согласен (я об этом честно говоря не подумал), спасибки за ценное замечание! Однако много информации это не даст, разве что написать антикапчу :crazy: для регулярого снятия инфы. Вопщем дырка есть, но не критичная я думаю :)
 
спасибки за ценное замечание!
ничего ценного, это не единственный способ (через картинку), можно вывести стату текстом иным запросом

дело не в том, страшно или нет..просто это противоречит написанному вами в статье =)
И на другом форуме вы бы получили издевательские комменты от юзеров и модеров. Так что будьте аккуратней..
 
просто это противоречит написанному вами в статье =)
Понимаете в чем дело то, я же не продаю/нахваливаю свои скрипты тут. Я просто на коленке склепал решение для идеи. Да, согласен получить кое какую инфу можно. Только вот мои слова о том что стата будет под паролем касались того факта, что скрипт производит аутентификацию и вынимает данные из статистики Liveinternet, которая закрыта для просмотра всем подряд. И упор тут вовсе не на предложенное решение - давайте посидим минут 10 в гугле и наковыряем еще с пару десятков независимых сервисов статистики, под них я уверен легко можно написать парсеры и они не будут обладать выше указанными багами.
И на другом форуме вы бы получили издевательские комменты от юзеров и модеров.
Неужели все так плохо на белом свете :)
А за критичный подход я говорю спасибо, ибо это гораздо лучше, чем когда просто закроют топик, прочитав.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх