Спасение от негативного поведенческого фактора (борьба с внешними proxy)
Сейчас в конкурентной борьбе не гнушаются использовать и методы накрутки негативного поведенческого фактора. В метрике Яндекса отчетливо видно, что есть закономерность у запросов:
- Время на сайте 0 секунд
- Примерно равное время между заходами
- Чередование стран
- Одинаковое разрешение экрана
- Одинаковая OS
Выбираем паттерн, по которому дуем искать «злоумышленников».
Т.к. большая часть клиентов это РФ и Казахстан, для определения злоумышленника мы решили выбрать всех веб-клиентов, кто заходит на наш сайт из других стран.
Хотя можно было бы выбрать и другие варианты или комбинации. Например, страна + юзер-агент (браузер) или страна + разрешение экрана (тут сложнее, т.к. придется запускать клиентский JS код для определения разрешения экрана клиента).
Блокируем злоумышленников из стран, где у нас нет клиентов.
Для блокировки по гео-данным можно использовать много разных механизмов, библиотек и сервисов, в зависимости от нагрузки на ваш сайт, какие модули включены у вас на хостинге, и на каком языке программирования работает ваше веб-приложение (ваш сайт). Чтобы подобрать подходящее для вас, можно поискать в гугле поисковым запросом «[ваш язык программирования] geoip github».
В нашем случае у нашего хостинг-провайдера уже было установлено расширение geiop для языка php, на котором написан сайт клиента.
Пример кода на php
И вуаля! Переходы не из РФ остановились.
Рынок сбыта у этого бизнеса находится в РФ, поэтому блокировка иностранных IP не повлияла на продажи.
Надеюсь, кому-то будет полезно! (Над материалом работали ребята из dynamics.moscow)
Ну по факту-то скручивать ПФ ходят из местных сетей - "метрополитен", tele2 и ещё парочка. Заблочить бурж - толку не будет.
Мы вообще проводили эксперимент: откровенно ботовые сетки выводили на поддомен. Потом выяснилось, что людей туда многовато залетало, а толку для ПФ не оказалось от слова совсем. Это всё равно что воду решетом носить.
Проблема в том, что нормальную накрутку не выкупишь, нет пока ни единого алгоритма.
С моей точки зрения единственный способ - периодически обнулять ПФ, если они совсем свалились в негатив. Да, криво и коряво, да, ущерб для Гугла - некоторый. Но если нужны позиции в Яндекс - я других вариантов не вижу.
И каким образом обнуляете пф ?
смена URL с вариациями.
Яндекс легко индексирует, у него нет ограничений на обход и вывод в топ по мерикам домена - это заморочки Google. Но есть пачка метрик, которые держатся за URL - условно назовём эту белиберду "кармой домена", от запросного индекса до метрик ПФ.
Пока выглядит так, что оно работает, я на истину не претендую.
Лично мне кажется, что даже 30-100 переходов в месяц, с нулевым пребыванием на сайте, они докинут в копилку отрицательного ПФ. Потому от него лучше избавиться. Это, хоть чуть, но может помочь. Каждый день, один два робота заходят к вам из других стран. Известны ли они яше и гуглу как роботы, хрен их знает, как они учитываются тоже не известно.
Хуже, когда направленная атака человекообразных, с прокачанными профилями, от человека никак не отличить. Им-то всё равно, они может и не ломать пришли, просто те же профили нагуливают, попутно топча всё, что в зоне видимости.
Вы абсолютно правы, у меня такая фигня на сайте твориться. Почти 40% отказов и все боты из России, поэтому я даже заблокировать их не могу. При этом, у них даже IP-адреса и провайдеры разные.
Хорошо знакомая картина.
Пока Яндекс с ПФ не разберется - будет только расти и крепнуть, к сожалению. Ну, или Яндекс придётся скидывать со счетов и все усилия прилагать к продвижению в Google.
Крути в плюс сам себя
Если модуль GeoIP установлен на сервере, то тогда можно блокировать и перенаправлять пользователей из других стран с помощью файла .htaccess:
GeoIPEnable On
GeoIPDBFile (Путь к файлу: GeoIP.dat)
SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
Deny from env=BlockCountry
Ну, а если на сервере не установлен GeoIP, то тогда можно воспользоваться API сервиса Sypex Geo. Потом просто можно делать GET-запросы и перенаправлять или блокировать пользователей из других стран.
Для тех, у кого не установлен GeoIP на сервере, пользователей из других стран можно блокировать следующим образом:
<?php
$is_bot = preg_match(
"~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i",
$_SERVER['HTTP_USER_AGENT']
);
$geo = !$is_bot ? json_decode(file_get_contents('http://api.sypexgeo.net/json/'), true) : [];
switch ($geo['country']['name_en']) {
case 'Germany':
header('Location: https://yandex.ru/');
break;
case 'Poland':
header('Location: https://yandex.ru/');
break;
default:
echo 'Все, ништяк!';
break;
}
?>
Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl - это боты, которых данный скрипт будет пропускать независимо от страны.
Там, где Germany и Poland - вы можете написать любую страну. Добавлять страны тоже можно сколько угодно. Ну, а вместо редиректа на Yandex можно создать страницу с информацией об ограничение доступа и уже туда редиректить всех зарубежных пользователей.
Здесь получился хороший гайд собрался )
на сайт диснейленда чтобы переправляло надо еще написать ))
Можно никого и никуда не перенаправлять. Например, с тем кодом, что написал - можно вообще, как угодно играться:
<?php
$is_bot = preg_match(
"~(Google|Yahoo|Rambler|Bot|Yandex|Spider|Snoopy|Crawler|Finder|Mail|curl)~i",
$_SERVER['HTTP_USER_AGENT']
);
$geo = !$is_bot ? json_decode(file_get_contents('http://api.sypexgeo.net/json/'), true) : [];
switch ($geo['country']['name_en']) {
case 'Russia':
print "IP-адрес: {$geo['ip']}";
print "Страна: {$geo['country']['name_ru']}";
print "Регион: {$geo['region']['name_ru']}";
print "Город: {$geo['city']['name_ru']}";
break;
default:
header('HTTP/1.0 404 Forbidden');
break;
}
?>
Теперь вместо редиректа для всех пользователей, кто не из России - скрипт будет отдавать 403 ошибку (доступ запрещен).
Что будет если сайт с данными по ip недоступен?
Насколько это замедляет работу сайта? Во-первых, сетевые задержки, во-вторых, объём файла.
Почему бы не получать файл в фоне и сохранять у себя, а для запросов в реальном времени обращаться не к удаленному серверу, а локально к файлу?
Данные передаются в формате JSON, поэтому обычный пользователь даже не заметит какую-либо задержу. Ее можно увидеть только путем замера запроса. Да и многие сайты работают с API. Например, я делал CRM-систему, в которую было интегрировано около 30 различных API и на скорость веб-приложения это практически не повлияло.
Апи можно подключить хоть 100. Другой вопрос как это сделано. Если при каждом соединении с сайтом сайт в реальном времени обращается к 100 внешним апи, то это потенциальная дыра - раз, и загрузка сайта напрямую зависит от доступности всех 100 апи - это два. Плюс часто через апи тягается гораздо больший объём данных, чем это реально требуется. И все это передаётся по сети - это медленнее чем обращение к локальному файлу или бд, или тем более к кэшу.
А доступность сайтов с апи у нас в стране с гениальным Роскомнадзором - это лотерея.
Поэтому ваш пример для человека без понимания сути скорее даже вреден, чем полезен.
Почитайте про GET-запросы, HTTP и Reset API, т. к. вы не совсем понимаете, что говорите. Например, я воспользовался API Aviasels, если они меняют информацию у себя на сайте, то и по API подтягивается новая цена. В таком случае что, использовать парсер и сохранять все данные в БД, а не использовать API? Вы сами не понимаете, что пишите?
Судя по всему, тут вы не понимаете о чем я веду речь.
У меня опыт в этой сфере 16 лет.
Я говорю про то, что апи нужно с умом подключать. Использовать апи можно и нужно.
Но нужно чтобы запросы выполнялись максимально в фоне, кэшировались полученные данные, обрабатывались исключения и нештатные ситуации, вроде недоступности какого-то апи и т.д.
Потому что ваш пример - ужасный пример. Который в случае возможной недоступности апи способен сделать недоступным сайт, на который он будет установлен
Понял:) Я думал, что вы имеете ввиду то, что нужно вообще не пользоваться API из-за того, что данные хранятся на внешнем веб-ресурсе. Да, мой пример ужасный, но это всего-лишь пример и использовать его в продакшене - непрофессионально.
Это же просто пример. Можно скачать базу IP-адресов с официального сайта Sypex Geo, а можно воспользоваться их API, как в примере. А так, вы правы - лучше устанавливать базу на сервер, т. к. в таком случае запрос будет выполнятся быстрее.
Просто сейчас незнающие люди скопируют ваш код и вставят к себе на сайт. А потом сайт с айпишниками вдруг ляжет и сайты этих людей окажутся недоступными тоже.
Поэтому в таких случаях нужно писать что не нужно использовать этот код в реальных приложениях, и что этот пример неоптимален.
То есть 404 ошибку:
default:
header('HTTP/1.0 404 Forbidden');
break;
Я ошибку допустил, там должна быть ошибка 403, а не 404.
да, наверное вариантов и атак и "спасений" сильно больше, но как пример с которого стоит начинать - норм.
если будут заявки можем в рекомендательном изложении написать
Комментарий недоступен
Это спам, да. В спам обычно и залетает, толку то от такого маркетинга.
Ну блин, вы считаете, что поступили круто, и красавчики, вот так рубанув?
А ничего, что всегда есть часть аудитории, которая легитимная, и при этом ходит с нерусских ip? Довольно много людей сидят под vpn с иностранным ip, чтобы роскомнадзор им мешал жить, или, если за свою приватность боятся. Кто-то из под пальм может захотеть зайти, а кто-то из opera mini...
внимательно прочитайте, таких нет
Не поняла, по какому принципу, вы просто решили отрубить тех кто не из РФ? Накрутку могут осуществлять и с российскими гео 🙈
Компания работает только на РФ, другие рынки сбыта до неё не возможны. С российским гео накрутки не зафиксировано.
Вы понимаете, что то что Вы предлагаете бесполезно? Поведенческие оцениваются не у Вас на сайте, а на выдаче Яндекса.
Именно там Яндекс "видит" быстрые заходы-выходы с сайта. И все скрипты расположенные у вас - это как зайцу стоп-сигнал.
Да, конечно Метрика сообщает Яндексу о плохих поведенческих. Но это вторичный сигнал. Основной - выдача.
С таким же успехом можно не скрипты делать, а просто снять Метрику.
Но это не поможет с накруткой в выдаче.
Полностью согласен, у нас был мелкий случай, а если у кого-то будет крупный загон таких ботов? Этот материал имеет право на жизнь.