Не позволяя сценаристам захлопнуть ваш сайт - 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 ]

1 голос
/ 13 февраля 2009

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

Ваши вопросы:

  1. Удобство использования сайта
  2. Список делает сайт увлекательным и веселым
  3. Загрузка на сервер вызвана скриптами.

Ваши цели:

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

Цель № 1: поддерживать работу сайта на скорости, не замедляемой ботами.

Это на самом деле довольно просто. Попросите кого-нибудь еще разместить страницу. Вместо размещения главной страницы на ваших серверах, Amazon S3 / Akamai размещает эту страницу. Большая часть страницы в любом случае является «статической». Регенерируйте страницу каждые 5 минут или около того, обновляются более динамичные элементы. (Черт, регенерируй это каждые 1 минуту, если хочешь). Но теперь боты не бьют по вашему серверу - они бьют по CDN Akamai, который, безусловно, может взять на себя нагрузку.

Конечно, делайте это и для RSS-каналов. Нет никаких причин, по которым какой-либо другой сервис не может принять за вас пропускную способность / нагрузку. На соответствующей заметке, все ли изображения обслуживаются Akamai и т. Д. Зачем принимать удар?

Цель № 2: продать предмет людям, не пишущим сценарий

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

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

Таким образом, каждый раз, когда пользователь заходит на сайт, предлагайте сумку с дерьмом за 29,99 долл. США и включайте таймер на случайной скорости падения или повышения цены. Имейте изображение или некоторый другой индикатор, который говорит людям, понизится ли цена, если они терпеливы.

У пользователя есть "Купить сейчас!" кнопка, которую они нажимают, когда они видят, что цена / # соответствует их желанию.

* * Пример 1 042:

Пользователь:

  • 0 сек. 29,99 $ (1 шт.) говорит: «Жди более низкой цены!»
  • 7 сек. $ 31.99 (1 шт.) говорит: «Жди более низкой цены!»
  • 13 сек. $ 27,99 (1 шт.) говорит: «Спорим, ты можешь сделать лучше!»
  • 16 сек. $ 1,99 (0 шт.) Изображение говорит: «Вы было бы сумасшедшим, чтобы заплатить нам что-то за нет ничего! "
  • 21 сек. $ 4.99 (два предмета) говорит: «Это становится лучше!»
  • 24 сек. $ 4.99 (tres itemos) Изображение говорит: «Это не становится лучше, чем что! "
  • 26 сек. $ 8.99 (2 шт.) говорит: «Спорим, ты можешь сделать лучше!»

повторить ....

на постепенно затягивающемся цикле, который удлиняет время, когда отображается правильное «4,99 $ (tres itemos)»

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

Если они, например, «перерасходят деньги», они платят 24,99 долл. США за 3 предмета, и woot собирался взять с них только 4,99 долл. США за 3 предмета, а затем включить купон на 20 долл. США от следующей покупки.

Цель № 3: не доставлять «обычным» пользователям никаких заданий, чтобы доказать, что они люди.

Вы делаете логическую ошибку здесь. Вы предполагаете, что любой тест Тьюринга (http://en.wikipedia.org/wiki/Turing_test) должен вызывать раздражение. Это неправда!

Вот несколько идей:

  1. Создать игру. Наградой за участие в игре является купон на скидку 5 долл. На следующий заказ.
  2. Соедините двух случайных пользователей и попросите их общаться друг с другом. Каждому пользователю предлагается ответить на 2 вопроса другому пользователю: «Спросите, какого цвета ваши волосы?» и "Что ты собираешься делать на следующих выходных?" Некоторые пользователи работают в паре с генератором случайных предложений woot. Затем каждого пользователя спрашивают, является ли другой пользователь человеком. Если пользователь говорит, что генератор случайных предложений woot - это человек, тогда ответьте: «Нет, я не такой, и, может быть, вы тоже с Марса.
  3. Простая флеш игра, которая требует от пользователя маневрировать по полосе препятствий, чтобы получить купон на скидку.
  4. Спросите, в каком городе они находятся. Обратный геокодируйте IP-адрес, чтобы увидеть, близки ли они к правильным.
  5. Задайте глупые вопросы - "Как вы думаете, Джон Маккейн - великий президент?" «Чья картинка на твоих водительских правах?»

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

1 голос
/ 09 февраля 2009

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

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

0 голосов
/ 12 июля 2009

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

Используйте капчу, но в юмористическом ключе. Подобно рекламной акции в 1 000 000 долларов, создайте игру, в которой вы будете идентифицировать себя как личность. Это в прошлом задерживало «распродажу» BOC на разумное количество времени, в то время как люди, как и я, пытаются найти довольно простую, но смешную головоломку для ввода кода купона.

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

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

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

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

Я приобрел без помощи ботов или каких-либо сценариев, кроме wootalyzer, которые, по моему мнению, являются приемлемой помощью, 7 БП с 31.05.05. Лучшим, который я не получил, был "Пожалуйста, пожалуста меня". Аккумуляторы B & D тоже были забавными, но я думаю, они не ставили ботов в тупик, а только расстраивали обычных пользователей.

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

0 голосов
/ 12 июля 2009

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

Я ожидаю BoC для моего ответа;)

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

Чтобы решить первую проблему с ботами, захлопывающими первую полосу, попробуйте сделать приманку точно такой же, как настоящий мешок с дерьмом. Сделайте так, чтобы HTML-разметка для главной страницы включала такую ​​же разметку, как если бы это была сумка с дерьмом, но сделайте ее скрытой. Это заставит ботов включать движки CSS, чтобы определить, отображается ли мешок с дерьмом или скрыт. В качестве альтернативы, вы можете вывести этот «фальшивый» пакет с дерьмом html в случайное количество времени (часов?), Прежде чем вырастет реальный пакет с дерьмом. Это может привести к тому, что боты будут бить тревогу слишком рано (но не знают, как скоро).

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

0 голосов
/ 13 февраля 2009

Сделайте сканирование сайта дорогим.

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

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

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

0 голосов
/ 13 февраля 2009

Я не понимаю, почему фильтрация IP-адресов ДОЛЖНА быть чрезмерно дорогой. С IIS вы можете создать фильтр ISAPI, чтобы сделать это в собственном коде. Я уверен, что Apache имеет аналогичные интерфейсы. Используя IP-адрес клиента, вы можете написать простое ограничение скорости для HTTP-запросов, которое не зависит от запрещенного списка или другой такой ерунды.

0 голосов
/ 13 февраля 2009

Чтобы гарантировать продажу предметов только людям, не занятым сценарием, не могли бы вы обнаружить бесчеловечные быстрые ответы между предметом, отображаемым на первой странице, и сделанным заказом? Это переворачивает тактику задержки с ног на голову, вместо того, чтобы искусственно мешать всем через задержку в 0,5 секунды, разрешать запросы как можно быстрее и бить ботов, которые явно сверхчеловеческие :)

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

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

К сожалению, я не знаю ни одного хорошего способа остановить скребки вашего списка товаров: (

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

Почему бы вам не заблокировать кредитные карты пользователей, которых вы определили как ботов?

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

Я полагаю, что даже у профессионалов закончатся кредитные карты.

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

Удачи.

0 голосов
/ 10 февраля 2009

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

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

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

...