Помешать разработчикам сценариев захлопнуть ваш сайт

StackOverflow https://stackoverflow.com/questions/450835

Вопрос

Я принял ответ, но, к сожалению, я считаю, что мы застряли с нашим первоначальным сценарием наихудшего развития событий: КАПЧУ всем при попытках покупки дерьма.Краткое объяснение:кэширование / веб-фермы делают невозможным отслеживание обращений, и любой обходной путь (отправка некэшированного веб-маяка, запись в унифицированную таблицу и т.д.) замедляет работу сайта сильнее, чем это сделали бы боты.Вероятно, существует какое-то дорогое оборудование от Cisco или подобное, которое может помочь на высоком уровне, но трудно оправдать затраты, если альтернативой является использование CAPTCHA для всех.Позже я попытаюсь дать более полное объяснение, а также проясню это для будущих поисковиков (хотя другие могут попробовать, поскольку это вики сообщества).

Ситуация

Речь идет о распродаже пакетов с дерьмом на woot.com .Я президент Woot Workshop, дочерней компании Woot, которая занимается дизайном, пишет описания продуктов, подкасты, записи в блогах и модерирует форумы.Я работаю с CSS / HTML и едва знаком с другими технологиями.Я тесно сотрудничаю с разработчиками и обсудил все приведенные здесь ответы (и многие другие идеи, которые у нас возникли).

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

Боты захлопывают нашу главную страницу десятки раз в секунду, очищая экран (и / или просматривая наш RSS) в поисках случайной распродажи Дерьма.В тот момент, когда они это видят, запускается второй этап программы, которая входит в систему, нажимает "Я хочу один", заполняет форму и покупает это дерьмо.

Оценка

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

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

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

О, и то, что нам будут звонить люди, было бы наихудшим из возможных сценариев.Можем мы попросить их позвонить вам?

БрэдК:Методы Неда Батчелдера выглядят довольно круто, но они довольно надежно разработаны, чтобы победить ботов, созданных для сети сайтов.Наша проблема в том, что боты созданы специально для того, чтобы нанести ущерб нашему сайту.Некоторые из этих методов, вероятно, могли бы работать в течение короткого времени, пока разработчики сценариев не усовершенствовали своих ботов, чтобы они игнорировали приманку, просматривали на экране названия соседних меток вместо идентификаторов форм и использовали браузерный элемент управления с поддержкой javascript.

 

снова lc:"Если, конечно, шумиха не является частью вашей маркетинговой схемы". Да, это определенно так.Удивление от появления предмета, а также волнение, если вам удается его получить, вероятно, не меньше или даже больше, чем то дерьмо, которое вы в итоге получаете.Все, что исключает игру в порядке живой очереди, наносит ущерб острым ощущениям от "победы" в этом дерьме.

 

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

Остальные ответы обычно основаны на отслеживании IP-адресов, что, опять же, кажется как бесполезным (с ботнетами / зомби / облачными сетями), так и вредным (ловит много невинных людей, которые приходят с одного и того же IP-адреса).

Есть какие-нибудь другие подходы / идеи?Мои разработчики продолжают говорить "давайте просто сделаем CAPTCHA", но я надеюсь, что есть менее навязчивые методы для всех реальных людей, желающих немного нашего дерьма.

Оригинальный вопрос

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

В итоге скриптеры и боты пытаются программно [а] выяснить, когда вы продаете указанный товар, и [б] убедиться, что они в числе первых его купят.Это отстой по двум причинам:

  1. Ваш сайт захлопнут нелюди, замедляя работу всего для всех.
  2. Сценаристы в конечном итоге "выигрывают" продукт, заставляя постоянных клиентов чувствовать себя обманутыми.

Кажущееся очевидным решение - создать несколько переходов, через которые ваши пользователи смогут проходить перед оформлением заказа, но с этим связаны по крайней мере три проблемы:

  • Пользовательский опыт отстойен для людей, поскольку им приходится расшифровывать КАПЧУ, выбирать кота или решать математическую задачу.
  • Если воспринимаемая выгода достаточно высока, а толпа достаточно велика, какая-нибудь группа найдет способ обойти любую хитрость, ведущую к гонке вооружений.(Это особенно верно, чем проще настройка;скрытая форма "комментарии", перестановка элементов формы, их неправильная маркировка, скрытый текст "попался" - все это сработает один раз, а затем нужно будет изменить, чтобы бороться с таргетингом на эту конкретную форму.)
  • Даже если разработчики сценария не могут "решить" вашу настройку, это не мешает им захлопнуть вашу главную страницу, а затем подать сигнал тревоги, чтобы разработчик сценария заполнил заказ вручную.Учитывая, что они получают преимущество от решения [a], они, скорее всего, все равно выиграют [b], поскольку они будут первыми людьми, попавшими на страницу заказа.Кроме того, 1.все еще происходит, вызывая ошибки сервера и снижая производительность для всех.

Другое решение заключается в том, чтобы следить за слишком частым попаданием IP-адресов, блокировать их через брандмауэр или иным образом препятствовать их упорядочиванию.Это могло бы решить 2.и предотвратите [b], но снижение производительности при сканировании IP-адресов огромно и, вероятно, вызовет больше проблем, подобных 1.чем сценаристы занимались сами по себе.Кроме того, возможность облачных сетей и спам-ботов-зомби делает проверку IP довольно бесполезной.

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

Цели

  1. Продайте товар людям, не занимающимся написанием сценариев.
  2. Поддерживайте скорость работы сайта, не снижаемую ботами.
  3. Не приставайте к "обычным" пользователям с какими-либо задачами, которые нужно выполнить, чтобы доказать, что они люди.
Это было полезно?

Решение

Как насчет реализации чего-то подобного SO does с CAPTCHAs?

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

Если они не проходят проверку x раз подряд (скажем, 2 или 3), дайте этому IP тайм-аут или другую подобную меру.Затем, по истечении тайм-аута, сбросьте их обратно на проверку еще раз.


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

Что касается поимки слишком большого количества невиновных, вы можете опубликовать заявление об отказе от ответственности на странице проверки людей:"Эта страница также может появиться, если слишком много анонимных пользователей просматривают наш сайт из одного и того же места.Мы рекомендуем вам зарегистрироваться или войти в систему, чтобы избежать этого ". (Соответствующим образом измените формулировку.)

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


Редактировать:Другой вариант - если они выходят из строя слишком часто, а вы уверены в востребованности продукта, заблокировать их и заставить их лично ПОЗВОНИТЬ вам, чтобы снять блокировку.

То, что люди звонят, действительно кажется идиотской мерой, но это удостоверяется, что где-то за компьютером есть человек.Ключ в том, чтобы блок был установлен только для условия, которое почти никогда не должно выполняться, если только это не бот (напримерпровалите проверку несколько раз подряд).Затем это ВЫНУЖДАЕТ человека к взаимодействию - поднять трубку.

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

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


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

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

Другие советы

Вам нужно придумать способ заставить ботов покупать товары по сильно завышенной цене:гайка-крыло 12 мм:$20.Посмотрите, сколько ботов раскручивается, прежде чем сценаристы решат, что вы играете с ними.

Используйте прибыль, чтобы купить больше серверов и оплатить пропускную способность.

Мое решение состояло бы в том, чтобы сделать очистку экрана бесполезной, установив примерно 10-минутную задержку для ботов и скриптов.

Вот как бы я это сделал:

  • Регистрируйте и идентифицируйте всех повторных нападающих.

Вам не нужно регистрировать каждый IP-адрес при каждом обращении.Отслеживайте только одно из каждых 20 обращений или около того.Рецидивист по-прежнему будет обнаруживаться при рандомизированном случайном отслеживании.

  • Сохраните кеш вашей страницы примерно за 10 минут до этого.

  • Когда повторный нападающий / бот попадет на ваш сайт, передайте ему кэшированную страницу 10-минутной давности.

Они не сразу поймут, что получают старый сайт.Они смогут отыграться и все такое, но они больше не выиграют ни одной гонки, потому что у "настоящих людей" будет 10-минутная фора.

Преимущества:

  • Никаких хлопот или проблем для пользователей (например, капчи).
  • Полностью реализовано на стороне сервера.(не полагаться на Javascript / Flash)
  • Обслуживание старой кэшированной страницы должно требовать меньших затрат на производительность, чем живой страницы.Таким образом, вы действительно можете уменьшить нагрузку на свои серверы!

Недостатки

  • Требуется отслеживать некоторые IP-адреса
  • Требуется сохранить и поддерживать кэш старых страниц.

А ты как думаешь?

Взгляните на эта статья Неда Батчелдера здесь.Его статья посвящена остановке спам-ботов, но те же методы можно легко применить и к вашему сайту.

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

Этот метод - то, как я предотвращаю появление спам-ботов на этом сайте.Это работает. Описанный здесь метод вообще не рассматривает содержимое.

Некоторые другие идеи:

  • Создать официальный механизм автоматического уведомления (RSS-канал?Twitter?) на который люди смогут подписаться, когда ваш продукт поступит в продажу.Это уменьшает потребность чтобы люди создавали сценарии.
  • Измените свой метод обфускации прямо перед тем, как новый товар поступает в продажу.Так что, даже если сценаристам удастся усилить гонку вооружений, они всегда отстают на день.

Редактировать:Для полной ясности, в статье Неда выше описаны методы предотвращения автоматической ПОКУПКИ товаров путем предотвращения прохождения ботом форм для отправки заказа.Его методы не были бы полезны для предотвращения того, чтобы боты просматривали домашнюю страницу, чтобы определить, когда Пачка Моркови поступит в продажу.Я не уверен, что предотвратить ЭТО действительно возможно.

Что касается ваших комментариев об эффективности стратегий Ned:Да, он обсуждает приманки, но я не думаю, что это его самая сильная стратегия.Его обсуждение ПРЯДИЛЬЩИК это первоначальная причина, по которой я упомянул его статью.Извините, я не прояснил это в своем первоначальном посте:

Счетчик - это скрытое поле, используемое для нескольких вещей:он хэширует вместе ряд значений, которые предотвращают подделку и повторы, и используется для сокрытия имен полей.Счетчик представляет собой MD5-хэш из:

  • Временная метка,
  • IP-адрес клиента,
  • Идентификатор записи в блоге, которую комментируют, и
  • Секрет.

Вот как вы могли бы реализовать это в WOOT.com:

Меняйте "секретное" значение, которое используется как часть хэша каждый раз, когда новый товар поступает в продажу.Это означает, что если кто-то собирается создать БОТА для автоматической покупки товаров, это будет работать только до тех пор, пока следующий товар не поступит в продажу!!

Даже если кто-то сможет быстро перестроить своего бота, все остальные реальные пользователи уже купят BOC, и ваша проблема решена!

Другая стратегия, которую он обсуждает, заключается в том, чтобы изменение время от времени применяйте технику "горшочек с медом" (опять же, меняйте ее, когда новый товар поступит в продажу).:

  • Используйте классы CSS (конечно, рандомизированные), чтобы задать полям или содержащему элементу значение display:none.
  • Раскрасьте поля в тот же цвет (или очень похожий на него), что и фон страницы.
  • Используйте позиционирование, чтобы переместить поле за пределы видимой области страницы.
  • Сделайте элемент слишком маленьким, чтобы отображать содержащееся в нем поле honeypot.
  • Оставьте поля видимыми, но используйте позиционирование, чтобы закрыть их затемняющим элементом.
  • Используйте Javascript для внесения любых из этих изменений, требуя, чтобы бот имел полноценный движок Javascript.
  • Оставьте приманки отображаемыми, как и другие поля, но попросите людей ничего в них не вводить.

Я предполагаю, что моя общая идея состоит в том, чтобы ИЗМЕНИТЬ ДИЗАЙН ФОРМЫ, когда каждый новый товар поступит в продажу.Или, по крайней мере, измените его, когда новый BOC поступит в продажу.

Это сколько, пару раз в месяц?

Если вы примете этот ответ, не могли бы вы предупредить меня о том, когда должен быть следующий?:)

Q:Как бы вы помешали скриптерам захлопывать ваш сайт сотни раз в секунду?
A:Ты этого не делаешь.Нет никакого способа, чтобы предотвращать это поведение внешних агентов.

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

Единственным жизнеспособным долгосрочным решением является измените правила игры чтобы сайт не был дружественным к ботам или менее привлекательным для разработчиков сценариев.

Как ты это делаешь?Ну, это уже другой вопрос!;-)

...

Хорошо, некоторые варианты были даны (и отклонены) выше.Я не очень хорошо знаком с вашим сайтом, поскольку просматривал его всего один раз, но поскольку люди могут читать текст на изображениях, а боты не могут легко это сделать, измените объявление на изображение. Это не КАПЧА, просто изображение -

  • генерируйте изображение (разумеется, кэшированное) при запросе страницы
  • оставьте название источника изображения прежним, чтобы это не выдавало игру
  • большую часть времени изображение будет содержать обычный текст и будет выровнено так, чтобы оно выглядело как часть встроенной HTML-страницы
  • когда игра "включена", изображение меняется на текст объявления
  • текст объявления содержит URL-адрес и / или код это должно быть введено вручную чтобы получить приз.ЗАМЕНИТЕ код CAPTCHA, если хотите, но в этом, вероятно, нет необходимости.
  • для дополнительной безопасности код может быть одноразовым токеном, сгенерированным специально для запроса /IP/агента, так что повторные запросы генерируют разные коды.Или вы можете предварительно сгенерировать кучу случайных кодов (одноразовый блокнот), если генерация по требованию слишком обременительна.

Время выполнения-испытания реальных людей, отвечающих на это, и игнорирование ('ой, произошла ошибка, извините!пожалуйста, попробуйте еще раз") ответы быстрее, чем (скажем) половина этого времени.Это событие также должно вызвать оповещение разработчиков о том, что по крайней мере один бот разгадал код / игру, так что пришло время изменить код / игру.

Продолжайте периодически менять игру в любом случае, даже если никакие боты ее не запускают, просто чтобы зря потратить время сценаристов.В конце концов сценаристам игра надоест, и они уйдут в другое место ... мы надеемся ;-)

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

Редактировать:другим вариантом, помимо использования изображений, является использование javascript для заполнения текста "покупать / не покупать";боты редко интерпретируют javascript, поэтому они его не увидят

Я не знаю, насколько это осуществимо:...переходите в наступление.

Выясните, какие данные сканируют боты.Предоставьте им данные, которые они ищут, когда вы НЕ продаете всякую ерунду.Сделайте это таким образом, чтобы не беспокоить и не сбивать с толку пользователей-людей.Когда боты запустят вторую фазу, они войдут в систему и заполнят форму, чтобы купить roomba за 100 долларов вместо BOC.Конечно, это предполагает, что боты не особенно надежны.

Другая идея заключается в том, чтобы реализовать случайное падение цен в течение периода распродажи bag o crap.Кто купит случайный пакет с дерьмом за 150 долларов, когда вы ЧЕТКО заявляете, что он стоит всего 20 долларов?Никто, кроме чересчур усердствующих ботов.Но через 9 минут это уже 35 долларов ...затем, 17 минут спустя, это 9 долларов.Или что там еще.

Конечно, короли зомби смогли бы отреагировать.Смысл в том, чтобы сделать так, чтобы их ошибки обошлись им очень дорого (и заставить их платить вам за борьбу с ними).

Все это предполагает, что вы хотите разозлить некоторых ботоводов, что может быть не на 100% целесообразно.

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

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

Первый, всегда предложите "мешок с дерьмом".

Во-вторых, убедитесь, что это дерьмо обычно остается дерьмом.

В-третьих, часто переворачивайте это дерьмо.

Просто, не так ли?

Вам понадобится постоянный "почему наше дерьмо иногда бывает дерьмом?" ссылка рядом с предложением объяснить людям, что происходит.

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

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

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

Обновить: Я ожидаю, что вы можете заранее получить несколько звонков с жалобами людей.Я не думаю, что вы можете полностью остановить это.Однако, если это убьет ботов, вы всегда можете остановить это и перезапустить позже.

  1. Продайте товар людям, не занимающимся написанием сценариев.

  2. Поддерживайте скорость работы сайта, не снижаемую ботами.

  3. Не приставайте к "обычным" пользователям с какими-либо задачами, которые нужно выполнить, чтобы доказать, что они люди.

Вы, вероятно, не захотите это слышать, но # 1 и # 3 являются взаимоисключающими.

On the Internet, nobody knows you

Ну, никто и не знает, что ты бот.Не существует программного способа определить, есть ли человек на другом конце соединения, не требуя от него каких-либо действий.Предотвращение того, чтобы скрипты / боты делали что-то в Интернете, - это единственная причина, по которой были изобретены CAPTCHA.Не похоже, что это какая-то новая проблема, на решение которой не было затрачено много усилий.Если бы существовал лучший способ сделать это, такой, который не доставлял бы хлопот реальным пользователям, которые создает CAPTCHA, все бы им уже пользовались.

Я думаю, вам нужно признать тот факт, что если вы хотите убрать ботов со своей страницы заказа, хорошая КАПЧА - единственный способ сделать это.Если спрос на ваш случайный мусор достаточно высок, чтобы люди были готовы пойти на все, чтобы получить его, законных пользователей КАПЧА не отпугнет.

Метод, который Woot использует для борьбы с этой проблемой, меняет правила игры - в буквальном смысле.Когда они выставляют на продажу необычайно желанный товар, они заставляют пользователей поиграть в видеоигру, чтобы заказать его.

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

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


Вся ваша бизнес-модель основана на принципе "первым пришел, первым обслужен". Вы не можете делать то, что делали радиостанции (они больше не делают победителем первого абонента, они делают победителем 5-го, 20-го или 13-го абонента) - это не соответствует вашей основной функции.

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

Допустим, вы применяете все эти тактики.Если я решу, что это важно, я просто привлеку к работе 100 человек, мы создадим программное обеспечение для работы на наших 100 отдельных компьютерах и будем заходить на ваш сайт 20 раз в секунду (5 секунд между заходами для каждого пользователя / файла cookie / учетной записи / IP-адреса).

У вас есть два этапа:

  1. Смотрю первую страницу
  2. Заказ

Вы не можете установить блокировку captcha # 1 - это приведет к потере реальных клиентов ("Что?Я должен разгадывать капчу каждый раз, когда я хочу увидеть последнюю версию woot ?!?").

Итак, моя маленькая группа следит по времени, так что мы получаем около 20 проверок в секунду, и тот, кто первым увидит изменение, предупредит всех остальных (автоматически), которые снова загрузят главную страницу, перейдут по ссылке заказа и выполнят транзакцию (что также может произойти автоматически, если вы не внедрите captcha и не измените ее для каждого wootoff / boc).

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

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

Во-первых, избавьтесь от простых ботов

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

Это должно значительно снизить ваш трафик и изменить тактику, используемую пользователями бота.

Во-вторых, сделайте сервер невероятно быстрым.

Ты действительно не хочешь это слышать...но...

Я думаю, что вам нужно полностью индивидуальное решение снизу вверх.

Вам не нужно возиться со стеком TCP / IP, но вам может потребоваться разработать очень, очень, очень быстрый пользовательский сервер, специально созданный для корреляции пользовательских подключений и соответствующего реагирования на различные атаки.

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

Обслуживая в основном статичную веб-страницу (обновляется примерно каждые 30 секунд) на пользовательском сервере, вы не только сможете обрабатывать в 10 раз больше запросов и трафика (поскольку сервер ничего не делает, кроме получения запроса и чтения страницы из памяти в буфер TCP / IP), но и получите доступ к показателям, которые могут помочь вам замедлить работу ботов.Например, сопоставляя IP-адреса, вы можете просто блокировать более одного соединения в секунду для каждого IP-адреса.Люди не могут работать быстрее, чем это, и даже люди, использующие один и тот же собственный IP-адрес, будут редко блокироваться.Вы бы хотели сделать медленную блокировку - оставьте соединение в покое на целую секунду, прежде чем официально завершить сеанс.Это может передаваться в брандмауэр для более длительных блокировок особо вопиющим нарушителям.

Но реальность такова, что независимо от того, что вы делаете, нет никакого способа отличить человека от бота, когда бот создан человеком специально для одной цели.Бот - это всего лишь прокси для человека.

Заключение

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

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

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

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

Каждый раз, когда я думаю о "ну, а как насчет того, чтобы сделать это ..." Я всегда могу противостоять этому с помощью подходящей стратегии бота.

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

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

-Адам

Отказ от ответственности:Этот ответ совершенно не связан с программированием.Однако он в первую очередь пытается атаковать причину появления скриптов.

Другая идея заключается в том, что если у вас действительно ограниченное количество товара для продажи, почему бы вам не отказаться от методологии "в порядке живой очереди"?Если, конечно, шумиха не является частью вашей маркетинговой схемы.

Есть много других вариантов, и я уверен, что другие могут придумать какие-то другие:

  • очередь заказа (система предварительного заказа) - Некоторые скрипты все еще могут оказаться в начале очереди, но, вероятно, быстрее просто ввести информацию вручную.

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

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

  • аукцион (заслуга в этом принадлежит Дэвиду Шмитту, комментарии мои собственные) - Люди по-прежнему могут использовать скрипты, чтобы вмешаться в последнюю минуту, но это не только меняет структуру ценообразования, люди ожидают, что им придется бороться за это с другими.Вы также можете ограничить количество ставок за определенный период времени, заставить людей звонить заранее, чтобы узнать код авторизации, и т.д.

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

Я думаю, что требуется другое мышление

  • Не пытайтесь помешать ботам использовать ваш сайт
  • Не ищите исправления, которое работает немедленно, играйте в долгую игру

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

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

Это дает вам отчет о том, как быстро клиент покупает товар.

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

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

Со временем вырисовывается картина.

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

02:Вы также можете посмотреть на интервал времени, используемый для предложений, если интервал составляет 1 час, то некоторые ранние покупатели будут людьми.Однако человек редко обновляется в течение 4 часов.Если прошедшее время между публикацией и покупкой достаточно стабильно, независимо от продолжительности окна, то это бот.Если время публикации / покупки короткое для маленьких окон и увеличивается для больших окон, это отшельник!

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

Я думаю, что запрещать аккаунты ботов было бы бессмысленно, это было бы сродни звонку Гитлеру и словам "Спасибо за позиции ваших подводных лодок!" Каким-то образом вам нужно использовать эту информацию так, чтобы владельцы учетных записей этого не поняли.Давай посмотрим, смогу ли я что-нибудь выдумать.....

Обрабатывать заказы в очереди:

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

  1. Ваш заказ был размещен и находится в очереди.
  2. Ваш заказ был обработан.
  3. Ваш заказ был отправлен.

Пользователи думают, что они стоят в честной очереди.Обрабатывайте свою очередь каждые 1 час, чтобы обычные пользователи тоже сталкивались с очередью, чтобы не вызывать подозрений.Обрабатывайте заказы от аккаунтов bot и hermit только после того, как они побыли в очереди в течение "среднего времени заказа человеком + x часов".Эффективно превращая ботов в людей.

Я говорю предоставлять информацию о ценах с помощью API.Это неинтуитивное решение, но оно действительно работает, чтобы дать вам контроль над ситуацией.Добавьте некоторые ограничения в API, чтобы сделать его немного менее функциональным, чем веб-сайт.

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

Существуют прокси-серверы и ботнеты для предотвращения проверки IP-адресов.Существуют чрезвычайно хорошие скрипты для чтения капчи.В Индии даже есть команды рабочих, которые побеждают капчи за небольшую цену.Любое решение, которое вы можете придумать, может быть разумно отвергнуто.Даже решения Неда Батчелдера можно обойти, используя элемент управления WebBrowser или другой имитированный браузер в сочетании со списком ботнетов или прокси.

В настоящее время мы используем для этого последнее поколение балансировщиков нагрузки BigIP от F5.BigIP обладает расширенными функциями управления трафиком, которые могут идентифицировать скребки и ботов на основе частоты и шаблонов использования даже из набора источников, находящихся за одним IP.Затем он может ограничить их, предоставить им альтернативный контент или просто пометить заголовками или файлами cookie, чтобы вы могли идентифицировать их в коде вашего приложения.

Как насчет введения задержки, которая требует человеческого взаимодействия, вроде своего рода "игры с капчей"?Например, это может быть небольшая флеш-игра, в которой в течение 30 секунд они должны лопать шарики в клеточку и избегать лопания твердых шариков (избегая проблем с дальтонизмом!).Игре будет присвоено начальное значение случайного числа, и то, что игра передаст обратно на сервер, будет координатами и временными метками точек нажатия вместе с используемым начальным значением.

На сервере вы моделируете игровую механику, используя это начальное значение, чтобы увидеть, действительно ли от щелчков шарики лопнули бы.Если они это сделали, то они не только были людьми, но и им потребовалось 30 секунд, чтобы подтвердить свои права.Дайте им идентификатор сеанса.

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

Во-первых, позвольте мне кратко изложить, что нам здесь нужно сделать.Я понимаю, что просто перефразирую первоначальный вопрос, но важно, чтобы мы поняли это на 100% правильно, потому что есть много замечательных предложений, которые дают 2 или 3 правильных ответа из 4, но, как я продемонстрирую, вам понадобится многогранный подход, чтобы учесть все требования.

Требование 1:Избавление от "захлопывания бота":

Быстрое "захлопывание" вашей главной страницы снижает производительность вашего сайта и лежит в основе проблемы."Хлопанье" исходит как от ботов с одним IP, так и - предположительно - от ботнетов.Мы хотим избавиться и от того, и от другого.

Требование 2:Не вмешивайтесь в пользовательский интерфейс:

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

Требование 3:Избегание "гонки вооружений":

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

Требование 4:Предотвращение "тревожных" ботов:

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


Хорошо, итак, давайте посмотрим, сможем ли мы выполнить все четыре требования.Во-первых, как я уже упоминал, ни одна мера не поможет добиться желаемого результата.Вам придется объединить пару трюков, чтобы достичь этого, и вам придется проглотить две неприятности:

  1. Для прыжков через обручи потребуется небольшое количество пользователей
  2. Небольшое количество пользователей не смогут воспользоваться специальными предложениями

Я понимаю, что это раздражает, но если мы сможем сделать "небольшое" число достаточно маленький, Я надеюсь, вы согласитесь, что положительные стороны перевешивают отрицательные.

Первая мера:Регулирование на основе пользователя:

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

Вторая мера:Некоторая форма регулирования IP, как предлагают почти все:

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

Снижение производительности незначительно, если вы запускаете проверку IP перед всей остальной обработкой, используете прокси-сервер для логики регулирования и сохраняете IP-адреса в древовидной структуре, оптимизированной для поиска в memcached.

Третья мера:Маскировка дроссельной заслонки с помощью кэшированных ответов:

При ограничении работы скорострельных ботов с одним IP-адресом нам все равно приходится обращаться к медленным ботам с одним IP-адресом, т.е.боты, которые специально настроены так, чтобы "оставаться незамеченными", размещая запросы чуть дальше друг от друга, чем позволяет регулирование.

Чтобы мгновенно сделать медленных ботов с одним IP бесполезными, просто используйте стратегию, предложенную abelenky:отправляйте кэшированные страницы 10-минутной давности на все IP-адреса, которые были обнаружены за последние 24 часа (или около того).Таким образом, каждый IP-адрес получает один "шанс" в день / час / неделю (в зависимости от выбранного вами периода), и не будет видимого раздражения для реальных пользователей, которые просто нажимают "перезагрузить", за исключением того, что они не выиграют предложение.

Прелесть этой меры в том, что она также предотвращает появление "тревожных ботов", если они не исходят из ботнета.

(Я знаю, что вы, вероятно, предпочли бы, чтобы реальным пользователям разрешалось обновляться снова и снова, но нет способа отличить человека, рассылающего спам-запросы, от бота, рассылающего спам-запросы, без КАПЧИ или чего-то подобного)

Четвертая мера:Рекапча:

Вы правы в том, что CAPTCHA ухудшают пользовательский опыт, и их следует избегать.Однако, в _ один_ ситуация, когда они могут быть вашими лучшими друзьями:Если вы разработали очень ограничительную систему для противодействия ботам, она - из-за своей ограниченности - также выдает ряд ложных срабатываний;затем была подана КАПЧА в качестве последнего средства позволит тем реальным пользователям, которых поймают, ускользнуть от вашего регулирования (таким образом, избегая раздражающих ситуаций DoS).

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

Если вы, обслуживая кэшированные страницы 10-минутной давности, также предлагаете альтернативу, необязательно, "Обновление первой страницы" с проверкой CAPTCHA, затем люди, которые действительно хотите продолжать обновлять, можете по-прежнему делать это без получения старой кэшированной страницы, но ценой необходимости вводить КАПЧУ при каждом обновлении.Это является раздражение, но необязательный только для закоренелых пользователей, которые, как правило, более снисходительны, потому что они знать они используют систему, чтобы улучшить свои шансы, и эти улучшенные шансы не даются бесплатно.

Пятая мера:Дерьмо - приманка:

У Кристофера Махана была идея, которая мне скорее понравилась, но я бы придал ей другой оттенок.Каждый раз, когда вы готовите новое предложение, готовьте также два других "предложения", которые ни один человек не выбрал бы, например, 12-миллиметровый ореховый орешек за 20 долларов.Когда предложение появится на главной странице, поместите все три "предложения" на одну картинку с номерами, соответствующими каждому предложению.Когда пользователь / бот действительно закажет товар, им нужно будет выбрать (переключателем), какое предложение они хотят, и поскольку большинство ботов будут просто угадывать, в двух случаях из трех боты будут покупать бесполезный хлам.

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

Шестая мера:Регулирование ботнета:

[исключено]

Ладно............Сейчас я провел большую часть своего вечера, размышляя об этом, пробуя разные подходы....глобальные задержки....токены, основанные на файлах cookie..обслуживание в очереди..."незнакомый дросселирующий"....И это просто не работает.Это не так.Я понял, что основная причина, по которой вы еще не приняли ни одного ответа, заключалась в том, что никто не предложил способ предотвратить атаку распределенной сети / зомби / ботнета....так что я действительно хотел взломать его.Я полагаю, что я решил проблему ботнета для аутентификации в другая нить, так что я тоже возлагал большие надежды на вашу проблему.Но мой подход не сводится к этому.У вас есть только IP-адреса, по которым можно перемещаться, и достаточно большая ботнет-сеть не выявляет себя ни при каком анализе, основанном на IP-адресах.

Итак, вот оно у вас:Моя шестая мера - ничто.Ничего.Застегнись.Если только ботнет не мал и / или достаточно быстр, чтобы попасть в обычный IP-режим, я не вижу Любой эффективная мера против ботнетов, которая не требует явной проверки человеком, такой как CAPTHAs.Мне жаль, но я думаю, что сочетание вышеперечисленных пяти мер - ваш лучший выбор.И вы, вероятно, могли бы прекрасно справиться с одним только 10-минутным трюком abelenky с кэшированием.

Уже опубликовано несколько других / лучших решений, но для полноты картины я решил упомянуть об этом:

Если вашей главной заботой является снижение производительности, и вы смотрите на истинный стук молотка, тогда вы на самом деле имеете дело с DoS-атакой, и вам, вероятно, следует попытаться справиться с ней соответствующим образом.Один из распространенных подходов заключается в простом отбрасывании пакетов с IP-адреса в брандмауэре после нескольких подключений в секунду / минуту / и т.д.Например, стандартный брандмауэр Linux, iptables, имеет стандартную функцию сопоставления операций 'hashlimit', которая может использоваться для сопоставления запросов на подключение в единицу времени с IP-адресом.

Хотя этот вопрос, вероятно, был бы более уместен для следующего SO-производного, упомянутого в последнем SO-подкасте, он еще не запущен, так что, я думаю, можно ответить :)

Редактировать:
Как указывает novatrust, все еще существуют интернет-провайдеры, фактически НЕ назначающие IP-адреса своим клиентам, поэтому фактически клиент-скрипт такого интернет-провайдера отключил бы всех клиентов от этого интернет-провайдера.

Напишите обратный прокси-сервер на сервере apache перед вашим приложением, которое реализует Tarpit (Статья в Википедии) чтобы наказать ботов.Он просто управлял бы списком IP-адресов, которые подключились за последние несколько секунд.Вы обнаруживаете пакет запросов с одного IP-адреса, а затем экспоненциально задерживаете эти запросы перед ответом.

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

  1. Создавать RSS-каналы, чтобы они не съесть вашу полосу пропускания.
  2. При покупке заставьте всех немного подождать Случайный время до 45 секунд или что-то еще, в зависимости от того, что именно вы ищете.Именно каковы ваши временные ограничения?
  3. Дайте каждому 1 минуту, чтобы указать свое имя для розыгрыша, а затем случайным образом выберите людей.Я думаю, что это самый справедливый способ.
  4. Отслеживайте учетные записи (включайте несколько раз в сеанс и сохраняйте его?) и добавляйте задержки к учетным записям, которые кажутся ниже человеческого порога скорости.Это, по крайней мере, заставит ботов быть запрограммированными на замедление и конкуренцию с людьми.

Прежде всего, по определению, невозможно поддерживать апатриды, т.е.действительно анонимные транзакции, а также возможность отделить ботов от законных пользователей.

Если мы можем принять предпосылку, что мы можем наложить определенную плату на совершенно нового посетителя woot при первом посещении его страницы, я думаю, у меня есть возможное решение.За неимением лучшего названия я собираюсь условно назвать это решение "визитом в DMV".

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

Загвоздка в том, что дилерский центр требует, чтобы вы посетили дилерский центр и предъявили действительные водительские права, прежде чем вас пропустят через дверь, чтобы посмотреть, какой автомобиль выставлен на продажу.Кроме того, у вас должны быть указанные действительные водительские права, чтобы совершить покупку.

Итак, первому посетителю (назовем его Боб) этого автодилера отказывают во въезде, и его направляют в офис DMV (который удобно расположен прямо по соседству) для получения водительских прав.

Другие посетители с действительными водительскими правами допускаются внутрь после предъявления своих водительских прав.Человек, который доставляет неудобства, слоняясь без дела весь день, приставая к продавцам, хватая брошюры и опустошая бесплатные чашки с кофе и печеньем, в конце концов будет отвергнут.

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

Водительские права в этом мире подделать практически невозможно.

Посещение DMV включает в себя сначала получение формы заявления в очереди "Начать здесь".Боб должен отнести заполненное заявление в окно № 1, где первый из многих угрюмых государственных служащих примет его заявление, обработает его и, если все в порядке, поставит штамп на заявлении для окна и отправит его в следующее окно.И вот Боб переходит от окна к окну, ожидая выполнения каждого шага своего приложения, пока, наконец, не доберется до конца и не получит водительские права.

Нет смысла пытаться "закоротить" автоинспекцию.Если формы заполнены неправильно в трех экземплярах или в любом окне даны неправильные ответы, заявка разрывается, а незадачливый клиент отправляется обратно на старт.

Интересно, что независимо от того, насколько заполнен или пуст офис, обслуживание в каждом последующем окне занимает примерно одинаковое количество времени.Даже когда вы единственный человек в очереди, кажется, что персоналу нравится заставлять вас ждать минуту за желтой линией, прежде чем произнести: "Следующий!"

Однако в DMV дела обстоят не так уж плохо.Пока идут все процедуры ожидания получения лицензии, вы можете посмотреть очень интересный и информативный рекламный ролик для автосалона, находясь в вестибюле DMV.На самом деле, инфомерикал длится ровно столько, чтобы покрыть то количество времени, которое вы потратите на получение лицензии.

Немного более техническое объяснение:

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

Этот подход, вероятно, требует обработки на стороне клиента AJAX-y.Совершенно новому посетителю woot предоставляется страница "Добро пожаловать, новый пользователь!", полная текста и графики, для полной загрузки которой (при соответствующем регулировании на стороне сервера) требуется несколько секунд.Пока это происходит (и посетитель, предположительно, занят чтением страницы (ов) приветствия), его идентификационный токен медленно собирается.

Допустим, для обсуждения токен (он же "водительские права") состоит из 20 блоков.Чтобы получить каждый последующий фрагмент, клиентский код должен отправить действительный запрос на сервер.Сервер включает преднамеренную задержку (скажем, 200 миллисекунд) перед отправкой следующего блока вместе с "штампом", необходимым для выполнения следующего запроса блока (т. Е. штампы, необходимые для перехода из одного окна DMV в следующее).В целом, должно пройти около 4 секунд, чтобы завершить процесс chunk-challenge-response-chunk-challenge-response-...-chunk-challenge-response-completion.

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

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

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

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

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

Вот несколько идей, как усложнить написание ботов:

  • Требуется запустить функцию javascript.Javascript значительно усложняет написание бота.Возможно, потребуется captcha, если они не запускают javascript, чтобы по-прежнему разрешать фактическим пользователям, не использующим javascript (минимально).

  • Засекайте время нажатий клавиш при вводе текста в форму (опять же через javascript).Если это не по-человечески, тогда отвергните это.Очень сложно имитировать человеческий ввод текста в боте.

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

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

  • Вы могли бы пойти еще дальше и использовать Flash-контент.Писать бота против Flash - сплошная мука.

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

Установите 5-минутную задержку для всех объявлений о продуктах для незарегистрированных пользователей.Случайные пользователи на самом деле этого не заметят, а случайные пользователи все равно будут зарегистрированы.

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

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

И, да, технология DDOS-атак определенно существует, которая могла бы разрушить эту схему, но он не видит, как это происходит в реальном мире.Напротив, он говорит, что это значительно снизило нагрузку на его серверы.

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

Это также имело бы побочный эффект (полезный, я бы сказал, но я могу ошибаться с точки зрения маркетинга в вашем случае), возможно, в расширении круга людей, которым повезет, и они смогут приобрести woot.

Большинство чисто технических решений уже были предложены.Поэтому я предложу другой взгляд на проблему.

Насколько я понимаю, боты настраиваются людьми искренне пытаюсь купить сумки, которые вы продаете.Проблема в том, что -

  1. Другие люди, которые не управляют ботами, заслуживают шанса на покупку, а вы предлагаете ограниченное количество сумок.
  2. Вы хотите привлечь людей на свой сайт и просто продавать пакеты.

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

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

Разработчики ботов по-прежнему могут запускать ботов в вашем уведомлении, чтобы быстрее завершить покупку.Некоторыми решениями для этого могут быть предложения о покупке в один клик.

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

По сути, я предлагаю попытаться взглянуть на проблему как на социальную, а не техническую.

Асаф

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

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

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

Предотвращение DoS разрушило бы # 2 из целей @davebug, которые он изложил выше, "Поддерживать скорость сайта, не замедляемую ботами", но не привело бы к решению # 1, "Продать товар людям, не занимающимся написанием сценариев".

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

Итак, спамеры соревнуются с обычными людьми за победу на аукционе "болото дерьма"?Почему бы не превратить следующий аукцион в буквальном смысле в "мешок с дерьмом"?Спамеры платят хорошие деньги за пакет, полный doggy do, и мы все смеемся над ними.

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

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

Еще лучше, если предложение можно каким-то образом отклонить.Тогда вы все еще можете делать предложения на поддельном сервере, но когда бот заполнит форму, скажите "Извините, вы были недостаточно быстры" :) Тогда они определенно подумают, что все еще в игре.

Откуда вы знаете, что есть сценаристы, размещающие заказы?

Суть вашей проблемы в том, что вы не можете отделить скриптеров от законных пользователей и, следовательно, не можете заблокировать их, так откуда же вы знаете, что скриптеры вообще существуют?

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top