Клоакинг — заметка для идей

| 18.09.2014 | 0 Comments

Клоакинг Недавно выпустил в свет первую версию скрипта клоакинга, который определяет ботов от людей по признакам IP, HostName и UserAgent. А так как есть желание в дальнейшем его развивать, то я хочу разместить в качестве заметки статью с журнала «Хакер» от 09.2011 (152). Автор статьи, как я понял, RushteR.
Также, кому интересно, в конце статьи есть ссылка на материалы из диска к этому номеру журнала.

И так, «Клоакинг как средство выживания в поисковых системах»

Наверняка ты не раз слышал такое загадочное слово, как клоакинг.
Обычно его используют при общении на черных оптимизаторских форумах люди со статусом «ТопМастер». Сам по себе статус топмастера подразумевает очень приличный заработок на поприще SEO. Сегодня мы попытаемся понять, каким образом связаны приличные суммы американских президентов и приминение технологий клоакинга при создании дорвеев, а также разберем всю сущность этого метода поисковой оптимизации в текущих реалиях.

Матчасть

Клоакинг — это «черный» SEO-прием, который используется дорвейщиками для того, чтобы выдавать различную информацию на одной и той же странице поисковику и пользователю.
Ты спросишь, для чего нужно такое разграничение?
Очень просто. Применение данной технологии позволяет существенно увеличить время жизни страниц, нацеленных на быстрый сбор трафика (дорвеев). Теперь давай немного углубимся в суть клоакинга. Итак, допустим у нас есть специально подготовленная страница, в которой мы применяем клоакинг . При заходе на такую страницу поисковый робот увидит специально оптимизированную пагу, где ему не будут видны редиректы, баннеры и другие промоматериалы, к которым поисковые машины относятся крайне негативно. Пользователь же может увидеть два типа страниц: страница для пользователя («серчера»), пришедшего с поисковика и страница для всех других пользователей, не попадающих под определенные условия. В первом случае пользователь видит страницу с промоматериалами, ссылающимися на предмет его поиска, и не видит всей той грязной внутренней оптимизации для поисковика, которая могла бы его спугнуть. Во втором случае пользователь может увидеть совсем другую страничку, в корне отличающуюся от двух предыдущих, описанных выше. В последнее время клоакинг используется на взломанных сайтах, которые уже имеют множество внешних ссылок, и где уже была какая-то информация (данный факт является несомненным плюсом для Google). Такой подход является самым актуальным на текущий момент и позволяет:

1. Увеличить время жизни нашего дорвея (если мы сделали его на чужом ресурсе).
2. Долгое время скрывать факт хака от администратора сайта.

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

Идентификация

Существует четыре способа идентификации пользователей и ботов:

• HTTP referrer;
• User-Agent;
• IP-адрес;
• поведенческий анализ с помощью JavaScript.

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

HTTP referrer

Первый и по праву основной метод — это парсинг и анализ заголовка HTTP referrer.
С помощью данного метода мы сможем узнать следующие важные детали:
1. Откуда на наш дорвей пришел пользователь.
2. Является ли данный пользователь серчером.

Простейшая реализация проверки реферрера без получения исходного поискового запроса выглядит так:

1
2
3
4
5
6
<?php 
if (strstr($_SERVER['HTTP_REFERER'],     "http://google.")
   echo   'Информация  выдаваемая  серчеру';
else
   echo  'Информация  выдаваемая  другим';
?>

Стоит отметить, что подмена заголовка с реферрером не содержит в себе каких-либо трудностей, поэтому поисковые роботы могут маскировать себя под обычного серчера. В большинстве случаев HTTP referrer у поисковых роботов отсутствует.

User-Agent

Почти каждый HTTP-клиент указывает информацию о себе в поле «User-Agent» заголовка запроса. Этот параметр также не составит труда подменить или просто не указывать. Для лучшего понимания полезности данного заголовка разберем юзерагент гуглобота.
Итак, поисковый робот Google имеет несколько версий и, соответственно, различающийся от версии к версии User-Agent.

Вот несколько видов юзерагента гугла:

• Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
• Googlebot/2.1 (+http://www.google.com/bot.html)

Достоверно известно, что иногда Google заходит под видом обычного пользователя, указывая в качестве User-Agent один из популярных браузеров или просто пустое поле. Мы не будем собирать всю базу агентов гугла, а просто проверим все вхождения слова google в юзерагент с помощью одного из простейших способов на PHP:

1
2
3
4
<?php 
if(stristr("google",$_SERVER["HTTP_USER_AGENT"]))
   echo 'Это  бот';
?>

IP-адрес

Для реализации данного способа нам потребуется база IP-адресов гугла. За основу ты можешь взять базу, которую я заботливо положил на наш диск, но учти, что использовать только ее одну крайне нежелательно. Для удобства мы будем использовать базу в виде регулярных выражений, таким образом, у нас появится возможность удобного указания подсетей.
Также у каждого IP-адреса мы будем проверять hostname на наличие в нем слова google:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php 
$stop_ips_masks =  array(
    "66\.249\.[6-9][0-9]\.[0-9]+",
	"70\.91\.180\.25",
	"81\.159\.49\.212"
);
foreach ( $stop_ips_masks  as $v ) {
	if ( preg_match(  '#^'.$v.'$#', $_SERVER['REMOTE_ADDR'])) {
		echo  'Это  бот';
		break;
	}
}
if (strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), 'google')) echo  'Это  бот';
?>

Данный способ является одновременно самым сложным и самым действенным, поэтому его использование при клоакинге не просто желательно, а обязательно.

Сбор IP-адресов

Так как у гугла постоянно появляются новые подсети IP-адресов, вся сложность предыдущего метода заключается в их сборе и обновлении. Один из способов сбора адресов роботов заключается в создании видимой только для них ссылки на специальный скрипт, сохраняющий IP-адреса всех обращений к этому скрипту:

1
<div style="display: none;"><a href="target.php">click</a></div>

Сам скрипт сохранения IP-адресов target.php будет выглядеть так:

1
2
3
4
5
6
<?php 
   $f = fopen('base.txt','a+');
   fwrite($f,str_replace('.',  '\.',  "'".
      $_SERVER['REMOTE_ADDR']."',\n"));
   fclose($f);
?>

Чем дольше скрипт будет собирать IP-адреса, тем лучше. Перед началом использования обновленной базы обязательно очисти ее от дублей.

JS-клоакинг

Данный способ является совершенно новым направлением в клоакинге, с помощью него можно придумать кучу уловок, позволяющих перехитрить поискового робота. Так как в настоящее время эмуляция JavaScript в Google оставляет желать лучшего, хитрые дорвейщики и придумали некоторые трюки, которые поисковая машина просто не сможет понять. В целом же, применение JS-клоакинга позволяет успешно анализировать поведенческий фактор и более точно определять «человечность» клиента. В качестве примера я буду использовать библиотеку JQuery, так как она существенно облегчит написание кода и усложнит его разбор эмулятором.
Сразу же хочу предупредить, что, используя JavaScript-код, ты должен обязательно пропустить его через обфускатор, так как это нехитрое действие существенно усложнит разбор кода как машинам, так и твоим коллегам по цеху. Но не перестарайся, потому что за слишком сильно зашифрованный код гугл наносит санкции.

Поведенческий анализ

Что в первую очередь делает пользователь после захода на нужный ему сайт? Правильно, он начинает выполнять какие-то действия, например: движения мышью, нажатие клавиш, прокрутка скроллом, изменение размеров окна и т.д. Именно эти действия мы и будем отлавливать, а также применим несколько хитрых уловок, о выполнении которых для каждого отдельного пользователя гугл не сможет сказать однозначно.
В качестве первого примера я покажу, как можно отловить действия пользователя на странице с помощью JQuery:

1
2
3
4
5
6
$(document).ready(function () {
   $(window).bind(
      'click mousemove scroll resize keydown',function(event) {
   alert('Ты  совершил: '+event.type);
   });
});

Трюк с картинкой

Теперь я покажу пример небольшой хитрости, с помощью которой мы сможем более точно убедиться, кто именно просматривает текущую страницу. Для начала создадим файл с названием image.png и вставим в него следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
if(stristr("google",$_SERVER["HTTP_USER_AGENT"]))
   {
   header('Content-Type: image/png' );
   readfile('image2.png');
   }
else
   {
   header('HTTP/1.1 404 Not Found');
   die();
   }
?>

Далее включим интерпретацию кода в файлах с расширением png, создав файл .htaccess с таким содержимым:

AddType application/x-httpd-php .png

С помощью JavaScript выведем эту картинку на экран и проверим, загрузилась ли она на нашей странице:

1
2
3
4
5
6
document.write('<img src="image.png" alt="" />');
$(document).ready(function () {
$('img[src*="png"]').error(function () {
   alert('Ошибка  при  загрузке  картинок');
})
});

Что у нас получилось? При обращении картиночного робота к image.png он видит безобидную картинку, в то время как пользователь вместо этой картинки получает ошибку 404. В это же время наш JavaScript-код проверяет, были ли ошибки при загрузке картинки (а они как раз будут, не забывай о выданной пользователю странице). Таким образом, эмулятор JavaScript-робота Google не сможет понять, что происходит с обычным юзером. Картинку робот видит, в коде есть проверка на ошибки, то есть даже если он сможет понять, что тут за проверка, то все равно пойдет по другому пути, с рабочей картинкой.

Промо

Чтобы добиться максимального количества переходов, нам нужно навязать определенные действия пользователю. Поэтому, как только мы поймем, что это не робот, на пользовательский экран сразу же выведется красивая информация с промо, при этом скрывая все, что написано на странице.
В качестве примера приведу следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
document.write('<div id="dialog" class="window"><img style="cursor: pointer;" src="promo.jpg" alt="" /></div>');
$(document).ready(function () {
    $("#dialog").css('position',  'absolute');
    $("#dialog").css('display',  'none');
    $("#dialog").css('z-index',  '9999');
    $("#mask").css('position',  'absolute');
    $("#mask").css('left',  '0');
    $("#mask").css('top',  '0');
    $("#mask").css('z-index',  '9000');
    $("#mask").css('background-color',  '#000000');
    $("#mask").css('display',  'none');
    $(window).bind('mousemove scroll resize keydown', function (eve) {
     var maskHeight = $(document).height();
     var maskWidth = $(window).width();
    $('#mask').css({
         'width': maskWidth,
         'height': maskHeight
    });
    $ ('#mask').fadeIn(1000);
    $('#mask').fadeTo("slow",  0.90);
    $("#mask").css('background-color',  '#000000');
     var winH = $(window).height();
     var winW = $(window).width();
    $("#dialog").css('top', winH /  2 -         $("#dialog").height() /  2);
    $("#dialog").css('left', winW /  2 -         $("#dialog").width() /  2);
    $("#dialog").fadeIn(2000);
    $(window).bind('click',  function (event) {
        $(this).load('pl.txt',  function (resp) {
            eval('window.location = "' + resp + '";');
                $(this).unbind(event);
});});});});

Как только пользователь начинает совершать какие-то действия, мы сразу же затемняем фон и выдаем картинку, при переходе на которую юзер будет перенаправлен на ссылку, находящуюся в файле pl.txt. Вынося ссылку в отдельный файл, мы скрываем ее от любопытных глаз, а также получаем возможность подгружать ее со стороннего ресурса. Данный метод является не самым оптимальным из-за того, что он навязывает действия серчеру, в результате чего пользователь уходит с нашей странички за очень короткий промежуток времени.
Ты должен понимать, что, чем дольше пользователь проводит времени на твоей странице, тем лучше эта страница выглядит в глазах поисковых систем. Поэтому здесь стоит выбрать что-то одно: больше пользователей за меньшее время или меньше пользователей за большее время.

Эмуляция серчера

После того как ты решился использовать клоакинг , тебе наверняка захочется протестировать его в боевых условиях, поэтому давай представим тебя тем самым серчером :). Итак, чтобы сделать вид, как будто ты пришел с поисковика, ты можешь использовать замечательное дополнение для FireFox под названием Modify Headers.
Здесь я не буду описывать работу с Modify Headers в силу его интуитивно понятного интерфейса, а опишу лишь необходимые действия:

1. Добавь новый заголовок и укажи в нем такие значения:
Action = Modify
Name = Referer
Value = http://google.com

2. На вкладке Options поставь галочку «Always on».
3. После этого открывай свою проклоаченную страничку и проверяй работоспособность своих скриптов в качестве серчера.

Обобщение

Теперь настало время обобщить все способы и собрать полноценный скрипт клоакинга.
В данном скрипте будут присутствовать следующие способы:

• проверка User Agent;
• проверка Referrer;
• проверка IP;
• проверка на действия пользователя;
• проверка картинкой;
• подгрузка ссылки для перенаправления из стороннего файла;
• красивый способ выдачи промо и сокрытия контента, задерживающие пользователя на страничке.

Полную реализацию скрипта с базой IP-адресов ты можешь взять с нашего диска. Если на твоем сервере нельзя использовать htaccess, то просто удаляй картинку, и скрипт все так же останется работоспособным.

Вредный Google Toolbar

Ни для кого не секрет, что у Google есть своя панель инструментов, устанавливаемая во все популярные браузеры, так называемый Google Toolbar. Кроме видимых для юзера функций в нем присутствуют еще и скрытые модули, которые передают поисковому гиганту пользовательскую информацию о посещаемой странице.
Еще несколько лет назад Google toolbar можно было легко определить с помощью javascript, сейчас же это не представляется возможным.При большом количестве трафика информация с тулбара начинает учитываться поисковиком, и тут наш клоакинг становится бесполезным. Роботы начинают понимать, что страницы, видимые ботом и клиентом, различаются. Пока тулбар даст понять Google, что на данном сайте используется клоакинг, может пройти много времени, поэтому тебе не стоит сильно волноваться по этому поводу. Проблема тулбара является одной из проблем, которые могут помешать скрыть от гугла перенаправление пользователя на нужный нам лендинг и приносить трафик максимальное количество времени. Другой проблемой является поведенческий фактор, который гугл также успешно учитывает, если пользователь слишком быстро уходит со страницы. При обнаружении поисковиком механизмов клоакинга на сайт накладываются жесткие санкции, поэтому использовать данную технологию нужно с умом и максимально правильно.

Заключение

В данной статье мы подробно разобрали такую интересную вещь, как клоакинг . Я надеюсь, что теперь ты и сам сможешь придумать еще более хитрые способы обмана поисковых систем.
Если ты собрался использовать клоакинг на практике, то обязательно собери свою полную базу IP-адресов и тщательно проверь ее. Также не используй на постоянной основе одну и ту же видимую пользователю часть (javascript, промоматериалы), иначе гугл легко сможет пометить все твои странички как одну большую сеть дорвеев. Чем легче определить твой клоакинг, тем быстрее ты попадешь в бан.

Скачать скрипты к этой статье Ложка дегтя для Google.

Категория: SEO, Инструменты / Софт, Программирование

Комментари (0)

Trackback URL | Comments RSS Feed

Комментариев пока что нет. Вы будете первым!

Оставить комментарий