Для отсеивания ботов, агрессивно [[https://www.opennet.ru/opennews/art.shtml?num=62925 индексирующих]] контент, игнорируя правила из robots.txt, можно воспользоваться тем, что многие боты запрашивают заранее предопределённый набор страниц и не передают Cookie, выставленные в ответ на прошлые запросы.Идея в том, чтобы при поступлении запроса проверять наличие определённой Cookie и если она отсутствует вместо запрошенного контента отдавать HTML-заглушку, возвращающую JavaScript-код для выставления Cookie и перенаправления пользователя на ту же страницу. При отправке запроса из браузера при первом входе запрос незаметно для пользователя будет проброшен через код установки Cookie. В промежуточном ответе используем код
ошибки HTTP [[https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/... 418]], информирующий о нежелании обрабатывать автоматизированные запросы.Предложенный метод не отсеивает всех ботов, но проще в настройке и менее назойливый для посетителей, чем применение системы защиты от ботов [[https://github.com/TecharoHQ/anubis Anubis]], допускающей вход только после подбора на языке JavaScript значения, хэш SHA-256 от которого в сочетании с выданной сервером строкой содержит определённое число лидирующих нулей (данная задача требует ресурсов CPU для решения, но не требует ресурсов для проверки).
Пример для http-сервера Caddy:
example.com {
# Проверка всех запросов на наличие Cookie "verified"
@unverified not header Cookie *verified*# JavaScript-код, выдаваемый для запросов без Cookie "verified"
handle @unverified {
header Content-Type text/html
respond <<EOF
<script>
setTimeout(() => {
document.cookie = 'verified=1; Path=/;';
window.location.reload();
}, 1000);
</script>
EOF 418
}# Нормальное проксирование остальные запросов
reverse_proxy localhost:3001
}Пример для nginx:
location / {
if ($cookie_verified = "") {
add_header Content-Type text/html;
return 418 '<script>setTimeout(() => {document.cookie = 'verified=1; Path=/;';window.location.reload();}, 1000);</script>';
}
....
}
URL: https://fxgn.dev/blog/anubis/
Обсуждается: https://www.opennet.ru/tips/info/3287.shtml
Ну вот, теперь пейсaтeли таких ботов знают как это обойти.
Думаю лучше таким ботам намеренно "скармливать" всякую чушь и делать это всем владельцам сайтов.
Может тогда удастся принудить их к соблюдению правил.
Хотя это наверно пустая надежда, когда у людей нет ни совести, ни чести...
>Думаю лучше таким ботам намеренно "скармливать" всякую чушь и делать это всем владельцам сайтов.
>Может тогда удастся принудить их к соблюдению правил.Не только не поможет, но и сделает хуже. Сайт зарепортят в Cloudflare, поисковики, хостеру и регистратору домена - как скам помойку черных вебмастеров.
У самого Cloudflare есть подобная возможность, которая отправляет ботов по бесконечному циклу сгенерированных ссылок
При обнаружении бота - слать его в tarpit, лимитировать число запросов десятью и отдавать со скоростью 100 байт в секунду.
Есть готовый модуль nginx testcookie. Не забыть добавить нормальных ботов в белый список.
>что многие боты запрашивают заранее предопределённый набор страниц и не передают Cookie, выставленные в ответ на прошлые запросы.Передавать куки с помощью requests или httpx тривиально. Скрейпинг требует достаточной имитации браузера, включая полную поддержку экзотических схем сжатия и заголовков. Эта имитация всего лишь для душевного спокойствия тех дураков (часто не знаешь, из их числа админ, или нет, но иногда дураки себя маркируют, прямо в каждую страницу в футер вставляя угрозы судом тем, кто скачает данные), которые "ой, у меня в метриках аномалия, пойду всё анально огорожу" не понимающих, что их сайты всё равно отскрейпят, только оверхед будет больше. Статические ресурсы я обычно не качаю; качать их не приносит пользы ни мне, ни владельцам сайта.
В крайних случаях – Cloudflare или ситуации, когда прямо совсем нежелательно быть обнаруженным (например, при создании датасета для CAPTCHA не хотелось бы, чтобы вебмастер просто взял и сменил алгоритм) – можно использовать полноценный хром с расширением, которое выполняет весь скрейпинг и сбрасывает результаты на локальный веб-сервер, работающий на fastapi. Но плясать под клаудфларь дорого, унизительно и недостойно, я предпочитаю этого избегать. Идеальное решение по-прежнему: ссылки на дампы данных в футере сайта.
Естественно, запросы - будь то Python-код или расширение для браузера - идут с значительными переменными задержками, превышающими оные в robots, маскируясь под обычный трафик. Торопиться некуда: большинство данных, которые скрейпящие в состоянии с пользой обработать, обновляются нечасто, при этом старые данные остаются актуальными. Владельцы сайтов, пожалуйста, делайте страницу, выгружающую всё, что можно выгружать, в дамп, и желательно с дельтами, как, например, это делают флибустьеры. Это было бы взаимовыгодно и вам, и скрейперам. Вы можете пытаться ссать против ветра, но это совершенно бесполезно и не приносит пользы никому. Те кто скрейпят - им же для дела надо, это не котики, без которых можно обойтись.
Владельцы сайтов не обязаны делать вам хорошо. Скорее это вы должны думать, как не делать им плохо. Потому что на самом деле не являетесь теми, для кого создается и наполняется сайт. Правильно было бы как-то платить за данные, если в дальнейшем из них извлекается какая-то прибыль.Да, я в защите тоже играл, и интеллект ботоводов у меня тоже вызывает много вопросов. Иногда кажется, что на той стороне вообще псевдоразумный гриб. А на опеннете смотри-ка, посты пишет...
>Правильно было бы как-то платить за данные, если в дальнейшем из них извлекается какая-то прибыль.А вы в суд обратитесь.
Вообще-то ПЛАТИТЬ ДОЛЖНЫ владельцы сайтов, чтобы на их сайты вообще кто-то заходил. А в эпоху самодостаточных мессенджеров вообще крайне сложно человека выманить пройти по внешней ссылке.
Как время от времени скачивающий половину интернета человек, выскажусь на тему бесполезности.
В скрипте дописывается одна строчка с установкой этой куки, да и дело с концом.Реально мешает, когда сервер использует куки (в комбинации с IP) для того, чтобы "красить" клиентов и лимитирует использование для каждой, особенно если код ответа нормальный и контент отдаваемых страниц отличается не принципиально.
Но практически всегда это каким-то образом обходится. Так, я спарсил данные об организациях определенного типа всего мира (что-то часов за 6) с гугл карт, вообще не меняя куки, одним и тем же окном, даже не пряча хедлесс хромиум. Тупо за счет алгоритма обхода карты, который делал бессмысленной защитку, обрезающую количество ответов. Поля получал, проверяя их взаимное расположение и текст (мутагенез с ид и классами бесполезен). Весь скрипт, где-то строк 500. Никакого рокет сайенс.Эникей админы, у которых до сих пор сайты на морально устаревшем языке и фреймворке, лучше бы думали, как его убрать за кэширующий сервер. Например, если куки нет, можно кидать контент в кэш на ключ урла и отдавать оттуда. Есть куки - запрашивать с апстрима по классике. Куки давать не всем подряд, а только тем, кому будет показан другой контент страниц. Сможете раздавать хоть гигабит трафика с одного ядра без особого напряга. Но вам же надо ботов наказывать, а не гарантировать уровень сервиса :)
К слову, ботов порезать проще простого. Достаточно красить трафик по автономкам и без ограничений пускать только интернет-провайдеров, предоставляющих услуги населению. Но это же думать надо и как-то страшненько.
Красить трафик стало вредно после экспансии хитрых NAT-ов и уползания ощутимого числа пользователей в VPN.Блокировать единичные скачивания не проблема, с этом и rate limit справится. Проблема в распределённых скрапперах, которые заваливают запросами с десятков тысяч или даже сотен тысяч разных IP (один раз за сутки насчитал около 300 тысяч), которые шлют запросы параллельно в 10-100 потоков. Когда на одном сервере несколько доменов - всё становится вообще печально и напоминает DDoS. Самое мерзкое, что с каждого IP приходит по несколько десятков запросов и потом IP меняется. С этим ещё можно бороться, когда трафик идёт из отдельных корпоративых подсетей. Но последнее время научились что-то вроде ботнета делать и привлекать обычных пользователей, которые за небольшую денежку ставят себе браузерный плагин для "помощи" обучения LLM.
По поводу оптимизации и отдачи статики, сайт остаётся жив, но из-за ботов кардинально вырастают затраты, когда используются площадки с оплатой за ресурсы или трафик.
Красить трафик != резать трафик. Смысл в том, чтобы обслуживать мусорный трафик в последнюю очередь с самым низким приоритетом.
Критерий наличия авторизации (и других признаков "естественности") очевидным образом снимает или ослабляет лимиты, даже если там один с ботами провайдер.>из-за ботов кардинально вырастают затраты
Подрубать "серым" клиентам скорость соединений/коннекты. Чтобы поток парсера максимально долго торчал в памяти на той стороне, читая по чайной ложке. Вынуждать использовать хедлесс браузер (памяти никогда особо много не бывает). Зашумлять верстку тегами/комментами, убирать из нее тексты/ид/классы, за которые просто зацепиться. Все это конечно не про мейнстримный фронтенд с уо разработчиками.
>в распределённых скрапперах, которые заваливают запросами с десятков тысяч или даже сотен тысяч разных IP (один раз за сутки насчитал около 300 тысяч), которые шлют запросы параллельно в 10-100 потоков. Когда на одном сервере несколько доменов - всё становится вообще печально и напоминает DDoS. Самое мерзкое, что с каждого IP приходит по несколько десятков запросов и потом IP меняется
Люди, занимающиеся парсингом и DDOS - одни и те же люди. Конечно это все напоминает ддос)
> Но практически всегда это каким-то образом обходится. Так, я спарсил данные об организациях определенного типа всего мира (что-то часов за 6) с гугл карт, вообще не меняя куки, одним и тем же окном, даже не пряча хедлесс хромиум. Тупо за счет алгоритма обхода карты, который делал бессмысленной защитку, обрезающую количество ответов. Поля получал, проверяя их взаимное расположение и текст (мутагенез с ид и классами бесполезен). Весь скрипт, где-то строк 500. Никакого рокет сайенс.Интересно было бы прикрутить к доставке информации о пробках в Organic Maps и им подобным с Google and Yandex.
Хотя, конечно же, тырыть это нечестно :(
Но можно возвращать информацию о трафике в движении. Прощай анонимность :(
Можно временно отключить получение информации о пробках и передачу информации о трафике на клиентском устройстве.
Единственная действенная мера противодействия - это просто закрыть сайт для всех, кроме белого списка государств и подсетей, а включать в этот белый список по критерию того, что1. юрисдикция присоединилась к конвенции ООН об обмене информацией.
2. в юрисдикции есть прецедент, согласно которому скрейпящих выимели именно за скрейпинг или вы контролируете суды этой юрисдикции
3. юрисдикция высылает тех, кого запросила сверхдержава, в которой вы живёте и являетесь гражданином, и имеете полезные связи внутри элиты, или если вы контролируете суды и силовиков той юрисдикции
4. вы можете себе позволить достать кого угодно оттуда в юридическом порядке, и окупить с лихвой процесс доставания с конфискованого у неудачника имущества.Как альтернатива:
1. на территории де-юре суверенного иностранного failed state действует контролируемая вами (или вашим поваром) ЧВК, которой местные марионетки ботинки лижут, и посему местные законы этой ЧВК не указ.
Не хотите или не можете так? Ну значит ваш сайт так или иначе отскрейпят.
Годная статья. Меня вот задолбал Anubis и то что оно выжирает батарею моего смартфона при посещении каждого второго сайта с опенсорсом, отчего я время от времени создательнице данного поделия высказываю свои "пожелания". Иногда задумываюсь над тем чтобы вернутся ко всему проприетарному, качать васяносборки и пользоваться теми же нейросетями, ибо там не будет транс-собако-системо-личностей что будет оценивать мои устройства на предмет ботоводства за счёт бесполезного вычисления хешей и показывать всякую мерзость во время этого.
Когда я писал свой поисковик, то сканируя адрес я всегда игнорировать robot чтоб получить чуть больше,чем мне позволенно. Уникальность была в моем поисковике
Ога, а потому будет как у всяких яндексов и вк. У яндекса 10 редиректов, прям как на отборных скам-сайтах. А у вк вообще сайт не работает для нормального пользователя. Ибо у нормального пользователя нормальный браузер, запрещающий межсайтовый куки-трэкинг.