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

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

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

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

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

0 голосов
/ 13 февраля 2009
  1. Tarpit. Ограничение просмотров страниц до 1 в секунду не беспокоит пользователей.
  2. Ссылки через JavaScript. Простые боты не копают это. Статистика показывает, что менее 1% пользователей не используют JS. 2а. хардкор версия выше. Ссылки во Flash.
  3. параметры хранятся в сеансе, а не в строке запроса. Большинство ботов не имеют статуса.
0 голосов
/ 15 мая 2009

используйте ограничение одновременного соединения для каждого IP-адреса через iptables на сервере (если он на базе Linux) или используйте выделенный «маршрутизатор»

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

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

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

Возможное решение поставленных целей, не обязательно название вопроса:

Вместо того, чтобы разыгрывать специальную сделку для всех, раздайте ее случайным наборам IP-адресов за раз. Например, разделите пространство IP на 256 уникальных блоков, и при времени = 0 разрешите только людям с ip-адресами в первом блоке, а при времени = 5 секунд разрешите людей из первого блока и второго блока ... до последний временной интервал прибывает, и позволяет всем видеть сделку. Одна из идей сделать это случайным образом - взять наименьшие значащие биты md5 / sha их IP плюс немного соли на основе сделки.

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

Объединение этого с некоторыми другими идеями кажется хорошей идеей.

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

Создай лучшего бота

Рынок говорит вам кое-что. Они хотят получить эту сумку дерьмо. Так что вместо того, чтобы бороться со сценариями (RIAA v кто-нибудь делится файлами?) Постройте лучшего бота.

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

Между продажами b-o-c приложение может показывать текущую позицию для продажи. Черт, сделай так, чтобы пользователь мог сказать приложению woot искать «карты памяти»

Кто будет создавать свой собственный сценарий, если официальное приложение сценария woot b-o-c + так же хорошо или не лучше?

Кроме того, woot получает еще один способ подключения к клиенту.

Ваши клиенты говорят вам, что они хотят.

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

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

Может быть, вы могли бы:

Просто подтвердите «победитель», убедившись, что его IP-адрес меньше, чем определенное пороговое значение в журналах (я использую «grep | wc -l», чтобы получить счетчик). Если он превышает ваш порог, временно заблокируйте этот IP (час или около того?).

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

Боты не получат их таким образом.

Чтобы раздражать дерьмо из скребков: Когда пункт «случайное дерьмо» поднимается, запустите вывод HMTL для этой страницы через «обфускатор кода» ... который не меняет «отображение» страницы ... просто шифрует код со случайно сгенерированными идентификаторами и т. Д. .

Более коварно:

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

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

Как насчет использования Flash?

Да, я знаю издержки использования Flash, плюс тот факт, что некоторые пользователи будут заблокированы от покупки bag-o-crap (например, пользователи iPhone), может сделать это вредным, но мне кажется, что Flash будет предотвратить скрининг или хотя бы затруднить.

Я не прав?

Отредактировано для добавления

Как насчет включения пары "скрытых" полей в форму отправки, как показано ниже:

На самом деле лучшая практика, похоже, заключается в используйте два скрытых поля, одно с начальное значение, а один без. Это редкий бот, который может игнорировать оба поля. Проверьте, чтобы одно поле было пустым, а другой иметь Начальное значение. И скрыть их, используя CSS, не делая их «скрытыми» Поля:

.important { дисплей: нет; }

Пожалуйста, не меняйте следующие два поля.

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

В логике обработки формы вы бы сделали что-то вроде:

if (address2 == "xyzzy" и address3 == "") {/ * ОК, чтобы отправить /}, иначе {/ вероятно, есть бот * /}

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

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

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

У вас должна быть запись о пользователях, которые чаще всего покупают BOC, почему бы просто не заблокировать эти учетные записи или что-то в этом роде. Конечно, законные пользователи будут забанены в этом процессе, но вы являетесь бизнесом, предоставляющим продукт, и если вы оскорбляете группу пользователей и тому подобное, вы имеете право отказать им в обслуживании. У вас есть много информации о ваших пользователях, включая PayPal и банковские счета, вы можете запретить эти учетные записи, заставляя пользователей бота получать новые учетные записи. Конечно, я мог бы придумать сценарий для покупки BOC все время или просто скачать его из сети, но у меня мораль лучше, чем эта. На самом деле, никогда не приобретая BOC, я знаю разочарование законных пользователей, которые хотели бы получить BOC в надежде получить отличную сделку. Возможно, вместо того, чтобы предлагать BOC в качестве отдельного предмета каждый раз и некоторое время, вы можете просто отдавать его случайным пользователям каждый день. Когда они получают предмет, они получают небольшую записку и дополнительный предмет, в котором говорится, что они также получили BOC. Тогда единственный способ получить BOC - это если они законно купили что-то, чего хотел бы только настоящий человек. Там не было бы ничего лучше, чем купить кофеварку или что-то еще, а также получить 42-дюймовый телевизор или что-то в дополнение к вашей законной покупке. Я думаю, что большинство сценаристов больше не будет интересоваться вашим сайтом, если для получения BOC им также придется совершить покупку на сумму более 10 долларов.

...