Не позволяя сценаристам захлопнуть ваш сайт - 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 голосов
/ 07 февраля 2009
  • Идите за денежным потоком. Это намного проще, чем отслеживание IP-адреса. Заставьте ботов платить слишком много раз (объявление с белым текстом на белом фоне и всеми его вариантами) быстро убивает их экономическое обоснование. Вы должны подготовить это тщательно, и использовать сильные стороны ботов: их скорость. Вы пробовали несколько тысяч поддельных объявлений с интервалом в несколько секунд? Если они бьют десять раз в секунду, вы можете идти еще быстрее. Вы хотите продолжать в том же духе, пока они продолжают покупать, поэтому тщательно продумайте момент дня / недели, когда вы хотите начать это. В идеале они перестают платить, так что вы можете передать дело в банк.
  • Убедитесь, что ваш сайт полностью сгенерирован, и каждый доступ к странице возвращает различное содержимое страницы (html, javascript и css). Синтаксический анализ сложнее, чем генерация, и в него легко встроить больше вариантов, чем разработчики ботов могут выдержать. Продолжайте изменять контент и то, как вы его генерируете.
  • Вам необходимо знать, как быстро боты могут адаптироваться к изменениям, которые вы делаете, и, предпочтительно, часовой пояс, в котором они находятся. Это один ботнет или более, они в одном часовом поясе, в другом или в всемирной сети разработчиков ? Вы хотите, чтобы ваша контратака была рассчитана правильно.
  • Текущее состояние искусства ботов есть люди ввести для CAPTCHA (предлагается против порно / игр).
  • Сделайте непривлекательной очень быструю реакцию.
  • Используйте хеши и honeypot, как объясняет Нед Батчелдер.

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

0 голосов
/ 29 октября 2009

Вы делаете этот путь трудно. Я, вероятно, пну себя, так как я только что выиграл BOC с сайта сегодня с сайта бота, но просто поместите текст RANDOM CRAP в капчи на главной странице сайта. Все боты ищут текст "RANDOM CRAP". Таким образом, вы в основном просто избегаете их запуска. Любой, кто смотрит их глазами, увидит, что там написано «Случайное дерьмо».

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

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

0 голосов
/ 25 мая 2010

Знаете, если вы опубликовали свой RSS-канал с помощью pubsubhubbub, людям не пришлось бы заходить на вашу веб-страницу снова и снова, чтобы увидеть следующую вещь в Woot-off, они просто ждали, пока она не появится в их Google Reader.

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

Если вы не можете победить их ... Измените правила!

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

«Победа» делает его веселее. и каждый человек вносит небольшую вступительную плату, поэтому Победитель получает продукт за ДАЖЕ меньше

0 голосов
/ 27 декабря 2010

как насчет использования нескольких кнопок заказа (четыре или более). Назовите их «image1» - «image4», три визуально одинаковые изображения («не нажимайте здесь») и одно чтение «нажмите здесь». Для каждой продажи случайным образом назначьте номер изображения для каждого варианта. Сделайте их довольно большими, чтобы пользователи не могли случайно щелкнуть не тот. Изображения будут иметь одинаковый размер файла. После того, как IP нажимает кнопку, любую кнопку, они перенаправляются на соответствующую веб-страницу (процесс заказа или «К сожалению, вы нажали не ту кнопку») и получаете 2-минутный таймаут от повторного доступа к серверу.

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

Я не веб-разработчик, поэтому возьмите это с щепоткой соли, но вот мое предложение -

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

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

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

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

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

0 голосов
/ 10 октября 2016

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

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

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

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

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

Я полагаю, что это одна из мер, которая отсеет некоторые из них:

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

Самым большим недостатком этого подхода является то, что вам нужно будет предпринять шаги, чтобы убедиться, что ваш CSS-файл не кэшируется на стороне клиента, поскольку он, конечно, должен содержать рандомизированные идентификаторы и имена классов. Один из способов преодоления этого состоит в том, чтобы не использовать внешние файлы CSS, а вместо этого поместить CSS с рандомизированными селекторами в раздел <head></head> страницы. Это позволит кэшировать рандомизированный CSS на стороне клиента вместе с остальной частью страницы.

...