Началась история с того, что один из моих сайтов стал скачивать подозрительный робот. Это был не Яндекс-бот и не Гугл-бот и вообще ни один из известных поисковиков. Подозрение подкреплялось тем, что Useragent был странный — curl/<ЧТО-ТО>, а Referer — d:/<ЧТО-ТО ЕЩЕ>. Единственной целью таких роботов является кража контента с атакуемого ресурса…

Около двух месяцев все не доходили руки поискать злобного парсера — понять, на каком другом домене выкладывается мой ценнейший контент (шутка). Я только иногда запрещал на уровне php-кода некоторые значения Useragent и Referer, но мой таинственный друг их подправлял и снова приходил на сайт с ненужной нагрузкой.

И вот, руки дошли!

Я придумал как найти парсера, а точнее его домен(ы) в выдаче Яндекса. Немного о проекте — около 10 миллионов однотипных страниц с регистрационными данными юридических лиц РФ — названия, коды, адреса и т.п. Но, на каждой странице присутствует длинная фраза о том, что текущее состояние юрлица может не соответствовать представленному. Ну да, 10 миллионов фирм — из них 400 тысяч что-то меняют каждый год (директора, юрадрес, учредителей...) Вот по этой фразе в Яндексе нашлось куча сайтов (не моих), но и с не моим контентом! (На второй странице выдачи, например, url типа uralres.ru/q6bCp__08pky) Хотя, сниппеты указывали, что там таки находится информация о юрлице. Первый десяток таких страниц я просто закрывал на автомате не задумываясь, а почему, собственно, в сниппете одно, а при переходе на сайт — какой-то ГС со средством для… по вкусу — потенции, похудения, антиопохмелин и т.д. Причем, если просто забить URL с этого сайта в адресную строку, то получим Ошибку 404!

Предполагаю следующий механизм работы этой системы:

  • Ищется сайт-донор с большим количеством страниц
  • Создается домен-акцептор, который начинает скармливать Яндекс-боту страницы с сайта-донора, заменяя на лету все ссылки на свои. Причем, как я понял, не напрямую типа donor.ru/otrasli/25 -> gs.ru/otrasli/25, а как-то шифруя их обратимо — donor.ru/otrasli/25 -> gs.ru/8SDnm34rLK
  • Страницы, отданные Яндексу даже не кэшируются акцептором — а зачем, потом еще раз заберем, если спросят. Но, если только спросит Яндекс-бот! А пользователю мы покажем рекламу чудодейственного средства.

Идем дальше.

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

Но, остановимся на запоях.

Это типичная посадочная страница, оформленная под блог телеведущей. Как-будто по мотивам одной из передач про алкоголизм был создан этот бложик для ответов на частые вопросы, обмена опытом и формой заказа препарата. Также все ссылки на странице с помощью javascript подменялись на якобы официальный сайт препарата типа c.superantipohmel.ru — это чтобы посетитель при любом клике попадал уже на белый сайт производителя.

Фото с изображением популярной ведущей, держащей в руках это чудо-лекарство — подделка, низкопробный фотошоп! Однако, судя по размаху дельцов, именно эта картинка вводит в заблуждение доверчивых граждан, случайно попавших на один из их сайтов.

Теперь вся схема мошенничества как на ладони!

Предприимчивый Веб-мастер разработал хитрую схему обмана:

  • Яндекс сканирует его сайт и видит неуникальный контент. Но Яндекс не всегда может распознать факт, что информация сворована, и какую-то часть данных помещает в свой индекс.
  • Интернет-пользователь вводит запрос на Яндексе и в результатах поиска видит ссылку на сайт мошенников. Кликает на ссылку, но получает уже не искомую информацию, а подмену — страницу (образец) с легко узнаваемой телеведущей.
  • Далее, самые доверчивые и те, для кого проблема алкоголизма в настоящий момент является наиболее острой, остаются на подменной странице, читают лже-рекомендации врача, лже-отзывы, видят нечеткую фотографию какого-то сертификата… и заказывают Антипохмелин.

Я провел мини-расследование — тоже заказал лекарство якобы для отца. В форме размещения заказа нужно указать ФИО, номер телефона и выбрать страну (для солидности?).

После отправки заказа мне через 5 минут с номера (495) 645-80-56 перезвонил некто Геннадий (система авто-дозвона, контакт-центр, все дела). Представился консультантом магазина Shop-online (два самых популярных поисковых слова — попробуй, найди магазин) и спокойным уверенным голосом поинтересовался, для кого я беру препарат. Справился о длительности пристрастия отца к алкоголю, тяжести зависимости. Выслушав мой слезливый рассказ, он авторитетно подтвердил, что А-похмел уверенно справляется именно с такой формой заболевания и результата в виде отвращения к алкоголю у пациента можно ждать после месячного курса. Месячный курс лечения препаратом — это 4 пачки, с доставкой стоимость около 4000 рублей!

Мы оформили заказ — у меня взяли адрес доставки. Вид доставки — почтой России с оплатой при получении. В комплект поставки должно входить само средство, инструкция и сертификат! Интересно, сертификат на что? Что это средство не представляет опасности для его принимающего? Посмотрим…

Погуглив поиском я нашел много отзывов о компании-продавце, чьи реквизиты указаны на белом сайте рядом с формой заказа. В частности, что они вообще не присылают то, что вы заказали, а вкладывают в посылку, например, копеечную пачку чая. Все равно на почте вы сначала оплатите наложенный платеж, а уж потом пойдете смотреть, что же пришло. Кстати, посылку вам отправит некое физическое лицо, на которое и в суд не подашь — у вас нет его паспортных данных и прописки. И вы не представляете, как сильно меня порадовал тот факт, что отзывы нашлись на МОЕМ сайте.

Итак, 4 этапа в схеме, и каждый из них мошеннический! Подменный контент — раз, использование образа ведущей-доктора — два, лже-сертификат — три, обман на почте — четыре. И каждый этап по отдельности максимально недоказуем — на сайт кроме как с Яндекса Вы не попадете, заказываете препарат уже на другом — «официальном» сайте производителя. Ну а то, что на почте вам выдали коробку с пакетиком чая за 4 килорубля — это вы с физиком-отправителем разбирайтесь, о чем там у вас договор был.

На этом мой отчет закончен. И да пребудет в сохранности контент ваш!

PS Дочитавшим до конца — бонус.

Как просто и наглядно распознать бота-вора, и вообще получить картину происходящего в данный момент на сайте? Я несколько месяцев вынашивал идею, как по одному взгляду на экран понять, все-ли хорошо с сайтом? И придумал такое решение. Сохранять в некое хранилище данные о 100 последних запросах к сайту — URL, Useragent, Referer, время работы скрипта…

Теперь, зайдя в любой момент на специальный URL мониторинга, я вижу, сколько у меня Яндекс-ботов, Гугл-ботов, бесполезных ботов и Посетителей приходится на 100 запросов в моменте. Вижу время срабатывания скриптов на разных классах урлов — медленные и быстрые урлы сразу выявляются. Вижу подозрительных ботов — ну не может обычный пользователь открыть 10 однотипных url за 10 секунд! А если разделить 100 запросов на количество секунд, за которые они прилетели, то получим нагрузку на сайт в запросах в сек.

В качестве стора рекомендую XCache (для любителей php). Он волшебен — многопоточный, быстрый, без локов! Но подходит только для хранения ничтожных данных на протяжении минимального промежутка времени. Этот дворник, который приходит все чистить, уж очень непредсказуем! Пробовал просить его приходить пореже, но тогда OOM случался.

Для 100 последних запросов вам понадобится 101 ячейка-ключ — cur_counter и zapr_i, где i=[0..99]. При каждом выполнении php-скрипта мы инкрементим cur_counter и вычисляем номер ячейки для поклажи статистики запроса как cur_counter % 100 (остаток от деления на 100). Далее в эту ячейку кладем метаданные по запросу и, не поверите, в кэше лежит ровно 100 последних запросов ВСЕГДА! Что класть в кэш и как это отображать — на Ваше усмотрение.
Поделиться с друзьями
-->

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


  1. claygod
    13.09.2016 17:03

    Вы пришли к цифре 100 сугубо эмпирическим путём,
    или вывели для себя какую-то формулу с переменными трафика?

    субъективно эта цифра кажется маловатой


    1. zapishiscom
      13.09.2016 18:10

      Пока только 10 запросов в секунду видел я, поэтому да — 100 достаточно. Завидую Вам, если этого маловато!


  1. RiseOfDeath
    13.09.2016 18:31
    +3

    не может обычный пользователь открыть 10 однотипных url за 10 секунд!


    Не знаю что у вас за сайт, но в общем случае ваше утверждение не верно. Я, например очень часто когда смотрю всякие, скажем так, сатый-каталоги или подобные им сайты (типа ебеев, алиэкспресса, яндекс маркета или, например хедхантера или линкедина), очень часто открою по несколько десятков страниц (заинтересовавших меня), а потом уже их рассматриваю подробнее.


    1. zapishiscom
      13.09.2016 19:06

      Но Вы когда-нибудь устанете страницы обновлять, а бот не устанет ) Я просто запоминаю IP подозрительного хоста и перезагружаю страницу мониторинга — получаю опять последние 100 запросов и ищу там этот хост


      1. Akichi
        13.09.2016 21:43

        А как вы боретесь с проксями? Ведь у ботов в наличии могут быть тысячи рабочих прокси, и обращение может идти каждый раз со случайных ip-адресов.


        1. zapishiscom
          13.09.2016 21:46

          Ответил ниже — ограничения на уровне iptables и Nginx, но это про ddos больше. Пока 95% запросов к сайту идут с Яндекса и Гугла, можно о ботах сильно не беспокоиться — это неизбежное зло)


  1. Chuns
    13.09.2016 18:33
    +4

    Вас коснулся арбитраж трафика, на товарку по CPA схеме, можно позавидовать, что только сейчас.
    Эта крутая идея активно живёт уже лет пять точно.


    1. zapishiscom
      13.09.2016 21:50

      Как Вы боролись? Или забивали?


      1. Chuns
        14.09.2016 09:36

        Только через вебмастера свой контент за собой столбим. Что-то закрывать — бесконечная история получается.


    1. dmitryrublev
      13.09.2016 23:16

      Почему это называется именно «арбитраж»? От слова «arbitrary?»


      1. Chuns
        14.09.2016 09:37

        Это из экономики — одновременное закрытие сделок купли/продажи (трафика) и попытка заработать на разности в цене.


  1. kozzztik
    13.09.2016 19:35

    На тему некоторого хранилища — для себя нашел отличным решением ELK — ElasticSearch + Logstash + Kibana. Установка из коробки (или из официальных докер контейнеров), нужно немного настроить логстеш и дальше скидывать в него отчеты по каждой странице. А дальше в кибане или прямыми запросами к эластику анализировать и агрегировать на столько, на сколько фантазии хватит.


  1. divanikus
    13.09.2016 20:22
    +3

    Вы вот сейчас научите плохому по поводу ботов. Мы вот собирали вполне себе безобидные данные с сайтов для собственного небольшого поисковика. Ну и короче есть небольшой процент слишком умных вебмастеров, навешивающих на себя столько всяких ограничений, вплоть до узкого диапазона айпи, что удивительно что их вообще кто-то индексирует.


    1. rca
      13.09.2016 21:23

      А вы уверенны, что вебмастеру так прям и нужно отдавать для ваших личных нужд свои данные?


      1. Ohar
        13.09.2016 21:37

        А зачем он их вообще тогда выложил?


        1. rca
          13.09.2016 21:54

          Вот несколько вариантов:
          1. для монетизации своих знаний через рекламу
          2. для поиска сотоварищей увлеченных той же темой/идеей
          2. для повышения своего PR рейтинга

          Как видите — скачивание вашим ботом контента с сайта нисколько не вписывается в задачи вебмастера.
          Ну и — 4. И уж тем более, он не видит смысла дополнительно оплачивать затраты из за нагрузки «облачного сервера» вашим ботом.

          :-)


          1. Ohar
            14.09.2016 01:33

            1. Вы примите как данность что всё, выложенное в интернет сразу куда-то копируется и сразу эти п.1 рассыпется на глазах, потому что монетизировать можно не знания, а блог как сервис поставки полезного контента и тут боты вам ничего не сделают.
            2, 3. Копирующий бот только поможет этому.


          1. divanikus
            14.09.2016 01:44

            Проблема нагрузки решается кэшированием и всяческими анти-ddos техниками. Остальное выглядит как если бы вы расклеивали объявления на улице, но запрещали людям их фотографировать.


          1. alibertino
            14.09.2016 11:50

            Это как устроить концерт на Арбате, запрещать фотографировать и мимо ходить. Все таки, публичность это не только плюсы. Или мало способов создать приватный сайт?
            Я вот так считаю, создавая сайт, пользуясь DNS, URL, TCP/IP и т.д., мы де-факто подписываем соглашение о публичности.


            1. rca
              14.09.2016 15:45

              Фотографировать можно, использовать сфотографированное в своих целях, тем более с целью наживы — нельзя! (с) закон :-)

              Помнится в околонулевых годах читал статью как один начинающий режиссер использовал «случайную съемку улицы» — девушка переходила дорогу в «информационном ролике» о малолетних проститутках.
              Сюжет через некоторое время показали по ЦТ, девушку стали узнавать и абсолютно не верили ей, что она не занимается проституцией. Благо, что интернета, вконтактника и однокласников тогда не было, так что дело решилось переездом в другой город. Сюжет к тому времени забылся и никто ее не опознал.

              Так вот — вы можете считать как угодно, но закон подобное запрещает. Просто прикиньте подобную ситуацию на себя или своих родных, а потом скажите — вы все еще за то, что бы чужую информацию можно было использовать как угодно, в том числе и в противоправных целях? :-)


  1. miksoft
    13.09.2016 20:57

    А когда-то давно такое решалось с помощью Fail2ban и блокировок на уровне файерволла, чтобы веб-сервер не дергать попусту.


    1. zapishiscom
      13.09.2016 21:41

      У нас стоят оптимистичные блокировки в iptables — 100 запросов в секунду на ip. Далее в Nginx — 10 запросов к скриптам в секунду на ip, а статика без ограничений.
      Fail2ban про другое, ИМХО — он блочит айпишники, с которых много неудачных попыток авторизации. А какой смысл анализировать логи Nginx'а — понятно, что там много валидных GET-запросов.
      Я предлагаю складывать последние N запросов (метаданных) в супер-быстрое хранилище (XCache), а затем, например, по крону, его разгребать и помещать провинившиеся хосты во временный бан в тот-же XCache. Если существует ячейка-ключ с искомым IP посетителя, то он будет в бане, пока не придет сборщик мусора. Критерий бана — ты не Яндекс, не Гугл, и в течение M секунд прислал K запросов. К сожалению, Яндекс не забирает у нас больше 5 страниц в секунду(


      1. shaurgon
        13.09.2016 22:36

        Когда-то давно писал простой shell-скрипт, который собирал статистику iptables по количеству запросов с одного IP.
        Победители рейтинга (топ 100) каждые 5 минут передавались на бан этому же iptables.
        Когда количество забаненных IP стало сильно тормозить файрволл, перешел на бан диапазонов.


  1. brainix
    13.09.2016 21:24

    Про динамические дорвеи, которые на лету отдают зеркала сайтов, за небольшими изменениями контента слышал года полтора назад, а тема значит живет еще дольше. А уж как монетизировать дорвей зависит от его создателя.

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


  1. edogs
    14.09.2016 03:53

    Странно читать это как новость на хабре, ладно бы на гиктаймесе, таким фокусам уже лет 15 только в рунете минимум, сайты такие обычно долго не живут.

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

    К тому же никто не мешает вскрыть посылку при получении и убедиться что там не то (вроде с почтой россии это правило для любых посылок уже маст хэв) или же увидев мошенничество заглянуть в полицию (мошенник даже деньги может не успеть получить, благо это почта россии — наложенный платеж до 2 недель может идти).


    1. zapishiscom
      14.09.2016 07:37

      Вы пробовали беспокоить полицию с вопросом на 4000 рублей? В 99% случаях заявителю говорят сам виноват)

      А насчет паспортных данных на почте — не представляю, с какой стати они Вам предоставят ПЕРСОНАЛЬНЫЕ данные отправителя.


      1. edogs
        14.09.2016 11:55
        +1

        Вы пробовали беспокоить полицию с вопросом на 4000 рублей? В 99% случаях заявителю говорят сам виноват)
        А Вы всегда верите тому что Вам говорят? Заявление примут, а больше ничего Вам от полиции и не надо. Это с одной стороны. С другой стороны им галки на чем-то рубить надо? Надо, а тут почти идеальная ситуация — мошенник сам придет за деньгами, заявление от терпилы есть, бегать никуда не надо.

        А насчет паспортных данных на почте — не представляю, с какой стати они Вам предоставят ПЕРСОНАЛЬНЫЕ данные отправителя.
        Можно подать иск в свой районный суд приложив запрос на получение этих данных и заодно передачу дела по подсудности.
        Можно адвокатский запрос сделать через адвоката.
        Первое дешевле:)


        1. zapishiscom
          14.09.2016 12:29

          Спасибо. Буду знать


    1. zapishiscom
      14.09.2016 08:51

      Не дают на почте вскрывать посылку до оплаты. А если получателю не понравится, что внутри, тогда почте-то что с коробкой делать? Она вскрытая, ее обратно не отправишь.
      Я десятки отзывов видел на тему почты — народ сначала оплачивает, потом открывает, потом идет в Интернет плакаться


      1. edogs
        14.09.2016 12:03
        +2

        Не дают на почте вскрывать посылку до оплаты. А если получателю не понравится, что внутри, тогда почте-то что с коробкой делать? Она вскрытая, ее обратно не отправишь.
        По закону и правилам — обязаны дать вскрыть до оплаты и убедится что там именно то, что заявлено.
        Проблемы — составляется акт, если проблем нет — посылка просто отдается.


  1. 1993KARO
    14.09.2016 07:32

    А вы не пробовали послать запрос к страницам этого сервера прикинувшись ботом яндекса или гугла? И кстати странно что этот сайт не вылетел еще из индекса, т.к. боты поисковиков помимо оф. сканов, также сканируют скрывая свое «происхождение»


    1. zapishiscom
      14.09.2016 07:41

      Пробовал через file_get_contents с контекстом и настроенным Useragent, но получил 404 — может они ботов по DNS проверять не ленятся


  1. yamatoko
    14.09.2016 08:21
    -3

    я ничего не понял.


  1. WebAirStudio
    14.09.2016 12:01

    Напишите обращение в Яндекс и Гугл, пусть предпримут какие то меры. Яндекс, например, пошел навстречу людям и начал банить за кликджекинг через виджеты ВК,


  1. yamatoko
    14.09.2016 12:10

    >Создается домен-акцептор, который начинает скармливать Яндекс-боту страницы с сайта-донора, заменяя на лету все ссылки на свои.

    как скармливать?


    1. zapishiscom
      14.09.2016 12:27

      Появляется новый сайт, на него приходит Яндекс-бот… Про то как привлечь Яндекс-бота вопрос? Ссылок на этот сайт проставьте, хоть покупных.


      1. yamatoko
        14.09.2016 17:42

        а если просто пойти на сайт к яндексу и через спец. форму для сабмита сайтов добавить, скормится?


        1. zapishiscom
          14.09.2016 19:19

          Да. Только представьте, что эффективнее — одна точка входа-сабмит сайта или несколько ссылок с разных ресурсов на Ваш сайт. +Сабмит (контрольный)


          1. yamatoko
            14.09.2016 20:35

            так же результат просто булевский. разве не одно и то же?


          1. yamatoko
            16.09.2016 04:21

            так же результат просто булевский. разве не одно и то же?


            1. zapishiscom
              16.09.2016 09:15

              Я помню, что SEO-шники рекомендовали несколько ссылок дать для начала на сайт перед индексацией. Но это алхимия — нужно самому пробовать


              1. yamatoko
                16.09.2016 10:01

                спасибо.


  1. gmixo
    14.09.2016 15:07

    Я дико извиняюсь но инфу про 100 последних запросов можно взять из логов вашего веб сервера и не зачем для этого чтото изобретать. Или я чтото не понял


    1. zapishiscom
      14.09.2016 19:26

      Логи лежат на диске, их нужно сгенерить и туда положить — это ресурсы системы. Еще нужно в консоли сервера сидеть и tail от файла логов смотреть — неудобно. На какой-нибудь URL мониторинга можно вывести хвост от такого лог-файла. Там время работы скрипта можно получить? Мне это критично было, чтобы производительность сайта тюнить.


  1. chugunoff
    14.09.2016 19:26

    Единственное, я только не понял, а средство от запоя помогло или нет?


    1. zapishiscom
      14.09.2016 19:29
      +1

      Ради экономии в 4к быстренько мобилизовался и без средства протрезвел.


  1. StarMarine
    16.09.2016 17:11

    У чуваков просто крутой SEO-скилл. Вам нужен такой же.