Не дать сценаристам ударить ваш сайт

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

ситуация

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

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

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

оценка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

цели

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

130 ответов

Решение

Как насчет реализации чего-то, что SO делает с CAPTCHA?

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

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


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

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

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


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

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

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

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


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

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

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

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

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

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

  • Войдите и идентифицируйте любых повторных нападающих.

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

  • Сохраняйте кеш своей страницы примерно на 10 минут раньше.

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

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

Выгоды:

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

Недостатки

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

Как вы думаете?

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

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

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

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

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

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

Что касается ваших комментариев об эффективности стратегий Неда: Да, он обсуждает honeypot, но я не думаю, что это его самая сильная стратегия. Его обсуждение SPINNER - первоначальная причина, по которой я упомянул его статью. Извините, я не прояснил это в своем оригинальном сообщении:

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

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

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

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

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

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

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

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

Что, пару раз в месяц?

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

В: Как бы вы помешали сценаристам отбивать ваш сайт сотни раз в секунду?
A: Вы не делаете. Нет способа предотвратить такое поведение со стороны внешних агентов.

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

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

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

...

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

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

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

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

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

РЕДАКТИРОВАТЬ: другой вариант, помимо использования изображений, заключается в использовании Ja vaScript для заполнения текста купить / не покупать; боты редко интерпретируют javascript, поэтому они не увидят его

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

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

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

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

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

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

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

Во-первых, всегда предлагайте "bag 'o crap".

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

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

Просто нет?

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

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

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

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

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

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

  2. Поддерживайте работу сайта на скорости, не замедляемой ботами.

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

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

В интернете никто не знает, что ты собака

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

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

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

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

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


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

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

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

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

  1. Просмотр главной страницы
  2. заказ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

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

-Адам

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Требование 4: Срыв ботов "тревоги":

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


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

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

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

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

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

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

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

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

Третья мера: закрытие дросселя кэшированными ответами:

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

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

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

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

Четвертая мера: reCAPTCHA:

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

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

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

Пятая мера: Приманка дерьмо:

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

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

Шестая мера: дросселирование ботнета:

[Удалено]

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

Итак, вот оно: моя шестая мера - ничто. Ничего такого. Zip. Если ботнет не является маленьким и / или достаточно быстрым, чтобы попасть в обычный IP-дроссель, я не вижу никаких эффективных мер против бот-сетей, которые не включают в себя явную проверку человеком, такую ​​как CAPTHA. Извините, но я думаю, что сочетание пяти вышеперечисленных мер - ваш лучший выбор. И вы, вероятно, могли бы справиться с одним только 10-минутным кешированием Абеленки.

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

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

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

РЕДАКТИРОВАТЬ:
Как указывает novatrust, все еще существуют интернет-провайдеры, которые фактически НЕ назначают IP-адреса своим клиентам, поэтому клиент-скрипт такого провайдера эффективно отключает всех клиентов от этого провайдера.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот несколько идей, которые затрудняют написание ботов:

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

  • Время нажатия клавиш при вводе в форму (снова через JavaScript). Если это не по-человечески, то отвергни это. Боль подражать человеку, набирающему текст в боте.

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

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

  • Вы можете пойти еще дальше и использовать Flash-контент. Флэш - это совершенно больно писать бота против.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Асаф

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

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

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

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

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

Другие вопросы по тегам