Ю.Блоги: безопасность + ошибки парсинга
Вчера мне на e-mail пришло письмо, в котором некто B@rmaley посоветовал мне убрать со студии ссылки на w3c валидаторы кода дабы не позорится ошибками. Я конечно убирать ничего не стал, так как знал, что ошибки эти - вина счетчика ucoz, но всё же ещё раз решил проверить причины ошибок. Как выяснилось свою роль сыграл так же импровизированный счетчик Юблогов. Дело в том, что strict xhtml не терпит фреймов. Немножко поскрипев мозгами, я нашел выход для этого. Просто вписал динамическое создания iframe через скрипт сразу после начала загрузки страницы. Валидатор это скушал: Далее я так же хочу довести до сведения администрации Юблогов (не знаю точно, сколько народу ими занимается), что iframe не обязательно делать нулевых размеров. Достаточно просто присвоить ему стиль display:none; Даже не смотря на скрытость фрейма, страница в нем всё равно загрузится! Я конечно понимаю что идеи малого бизнеса цветут и хорошеют, окружают нас каждый день и манят воспользоваться собой, создать проект и богатеть, но нужно же опыть хоть какой-то иметь!Таким образом я разобрался с первой частью своего сегодняшнего повествования)).
Я так же заинтересовался js основой сервиса Юблоги и покопался в их кодах. Почти сразу понял, что там много лишнего. На странице материалов, на которые и ссылается счетчик, который я описывал выше, стоит здоровый скрипт с кучей лишних переменных (образно) вся работа которого сводится к редиректу на страницу со словом "Нарушение!" в том случае если адрес страницы на которой установлен счетчик не совпадает с адресом блога в котором счетчик должен стоять по правилам сервиса. Чувствую, что админы хотели защитить сервис от накруток. К сожалению я далеко не уверен, что это работает, так как (не знаю точно, но почти уверен) сервер засчитывает в рейтинг материала единичку, как только его страница (материала) с сервера запрашивается, а вовсе не после полной загрузки страницы. В случае же Юблогов, вы всё равно зачтете своему блогу + в рейтинг, хотя и увидите "Нарушение!".
Я в свою очередь хочу предложить другой вариант решения проблемы накруток (хотя полностью от них избавится всё равно не удастся). Плюс ко всему, мой вариант упростит вид счетчика. Итак:
Для начала нужно создать на юблогах страничку напрмер с названием counter.html. На неё то теперь и будут ссылаться счетчики на всех блогах! И никаких тебе условных кодов. Едем дальше. На созданной странице необходимо разместить код, алгоритм работы вы поймете сразу. Сначала сам код с комментариями:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<script>
var blog = new Array();
blog[1]= "abasov.net";
blog[2]= "blog.omry.ru";
blog[4]= "ufoblog.info";
blog[86]= "studioad.ru";
var ref = document.referrer.replace(/(http\:\/\/)?(www\.)?/i,'').split('/')[0];
var id = blog.indexOf(ref);
if(id>0){document.location.href = 'http://blogs.ucoz.net/dir/1-1-0-'+id;}
</script>
</body>
</html> Это 100% защитит от накруток с помощью размещения счетчика на сторонних ресурсах. А так же позволит привести счетчик (валидный для всех доктайпов) к вот такому виду:Вот такие дела. Очень надеюсь что администрация Юблогов обратит внимание на мой пост и изменит свою систему защиты... ну и малоли, ну вдруг.. =) допишет меня в список разработчиков сервиса)) Спасибо и жду комментариев!
Code
<script type="text/javascript">
var iframe = document.createElement('IFRAME');
iframe.style.display = "none"; //об этом будет сказано ниже
iframe.src = "http://blogs.ucoz.net/dir/1-1-0-86??$HOME_PAGE_LINK$";
document.body.appendChild(iframe);
</script>
var iframe = document.createElement('IFRAME');
iframe.style.display = "none"; //об этом будет сказано ниже
iframe.src = "http://blogs.ucoz.net/dir/1-1-0-86??$HOME_PAGE_LINK$";
document.body.appendChild(iframe);
</script>
Накрутка аккаунта на Юблогах
Я так же заинтересовался js основой сервиса Юблоги и покопался в их кодах. Почти сразу понял, что там много лишнего. На странице материалов, на которые и ссылается счетчик, который я описывал выше, стоит здоровый скрипт с кучей лишних переменных (образно) вся работа которого сводится к редиректу на страницу со словом "Нарушение!" в том случае если адрес страницы на которой установлен счетчик не совпадает с адресом блога в котором счетчик должен стоять по правилам сервиса. Чувствую, что админы хотели защитить сервис от накруток. К сожалению я далеко не уверен, что это работает, так как (не знаю точно, но почти уверен) сервер засчитывает в рейтинг материала единичку, как только его страница (материала) с сервера запрашивается, а вовсе не после полной загрузки страницы. В случае же Юблогов, вы всё равно зачтете своему блогу + в рейтинг, хотя и увидите "Нарушение!".
Я в свою очередь хочу предложить другой вариант решения проблемы накруток (хотя полностью от них избавится всё равно не удастся). Плюс ко всему, мой вариант упростит вид счетчика. Итак:
Для начала нужно создать на юблогах страничку напрмер с названием counter.html. На неё то теперь и будут ссылаться счетчики на всех блогах! И никаких тебе условных кодов. Едем дальше. На созданной странице необходимо разместить код, алгоритм работы вы поймете сразу. Сначала сам код с комментариями:
Code
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<script>
var blog = new Array();
blog[1]= "abasov.net";
blog[2]= "blog.omry.ru";
blog[4]= "ufoblog.info";
blog[86]= "studioad.ru";
var ref = document.referrer.replace(/(http\:\/\/)?(www\.)?/i,'').split('/')[0];
var id = blog.indexOf(ref);
if(id>0){document.location.href = 'http://blogs.ucoz.net/dir/1-1-0-'+id;}
</script>
</body>
</html>
Code
<script type="text/javascript">
var i = document.createElement('IFRAME');
i.style.display = "none";
i.src = "http://blogs.ucoz.net/counter.html";
document.body.appendChild(i);
</script>
var i = document.createElement('IFRAME');
i.style.display = "none";
i.src = "http://blogs.ucoz.net/counter.html";
document.body.appendChild(i);
</script>
15, 3672