Не позволяя сценаристам захлопнуть ваш сайт - PullRequest
486 голосов
/ 16 января 2009

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

Положение

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

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

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

Оценка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Цель

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

Ответы [ 129 ]

4 голосов
/ 07 февраля 2009

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

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

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

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

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

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

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

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

3 голосов
/ 07 февраля 2009

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

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

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

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

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

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

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

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

Асаф

3 голосов
/ 07 февраля 2009

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

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

3 голосов
/ 16 января 2009

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

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

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

2 голосов
/ 16 января 2009

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

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

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

2 голосов
/ 11 февраля 2009

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

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

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

2 голосов
/ 07 февраля 2009

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

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

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

2 голосов
/ 16 января 2009

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

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

2 голосов
/ 22 июня 2009

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

2 голосов
/ 07 февраля 2009

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

...