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

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

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

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

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

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

Почему бы не сделать контент CAPTCHA?

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

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

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

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

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

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

  1. Просто: не называйте это «Случайным дерьмом». Меняйте название предмета каждый раз, чтобы его было сложнее идентифицировать. Они могут по-прежнему искать товары за 1 доллар, и в этом случае я предлагаю иногда продавать жевательные резинки за 1 доллар в течение нескольких минут. Доставка за 5 $ должна стоить вашего времени.

  2. Сложнее: не заставляйте пользователей делать что-то дополнительное - заставляйте компьютеры пользователей делать что-то дополнительное. Напишите функцию JavaScript, которая выполняет интенсивные вычисления, требующие достаточного количества вычислительной мощности, скажем, десятимиллионного простого числа, и попросите компьютер пользователя рассчитать это значение и передать его, прежде чем принять заказ (возможно, даже для создания разместить заказ "URL). Измените функцию для каждого BoC, чтобы боты не могли предварительно рассчитывать и кэшировать результаты (но так, чтобы вы могли). Затраты на вычисления могут просто замедлить работу ботов настолько, чтобы они не попали вам в спину - если ничего другого, это замедлит попадание на ваши серверы, чтобы они могли дышать. Вы также можете произвольно изменять глубину расчета - десятимиллионное простое число против стомиллионного - чтобы процесс заказа больше не был строго первым по порядку, первым обслужен и чтобы избежать наказания заказчиков более медленными компьютерами.

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

Я не знаю, было ли это предложено, но вместо того, чтобы хранить список IP-адресов ботов, которые вам нужно будет просматривать при каждом запросе страницы, почему бы не установить cookie или переменную сеанса в следить за ботами? Вот пример в PHP:

<?php
// bot check
$now = microtime(true);
// bot counter var
$botCounter = 0;
if (array_key_exists('botCheck_panicCounter', $_REQUEST))
{
  $botCounter = $_REQUEST['botCheck_panicCounter'];
}

// if this seems to be a bot
if ($botCounter > 5)
{
  die('Die()!!');
}

// if this user visited before
if (array_key_exists('botCheck_lastVisit', $_REQUEST))
{
  $lastVisit = $_SESSION['botCheck_lastVisit'];
  $diff = $now - $lastVisit;

  // if it's less than a second
  if ($diff < 1)
  {
    // increase the bot counter
    $botCounter += 1;
    // and save it
    $_REQUEST['botCheck_panicCounter'] = $botCounter;
  }
}

// set the var for future use
$_SESSION['botCheck_lastVisit'] = $now;

// ---------------
// rest of the content goes here
?>

Я не проверял синтаксические ошибки, но вы поняли.

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

Значит, твоя проблема - это слишком много бизнеса? Люди отслеживают ваши продажи? Это предполагает, что эти сценарии генерируют квалифицированные продажи? И проблема в том, что они раскупают весь ваш продукт раньше, чем все остальные?

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

Либо так, либо просто НАИБОЛЬШЕ получи больше инвентаря - ты не сможешь с ним бороться - обними и приспособься к нему.

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

Я согласен с постером выше, который говорил о том, что иногда продают действительно «дерьмовые» пакеты с дерьмом.

Похоже, вы придумали бизнес-модель, которая серверно ограничена технологией, с помощью которой вы пытаетесь ее реализовать. Тем не менее, как и большинство людей, склонных к технологиям (а не критизм, ведь именно для этого и предназначен этот сайт), вы пытаетесь найти техническое решение. НО ЭТО БИЗНЕС-ПРОБЛЕМА. Это вызвано сбоем в технологии, но это не значит, что технология - это ответ. И большинство всех решений, которые кто-либо придумает (и будет много вариантов), в конце концов будут обойдены теми, кто полон решимости «автоматически покупать» (из-за отсутствия лучшего краткого описания) ваши «мешки с дерьмом». *

ИМХО, вы задаете неправильный вопрос не тому человеку и потратите много времени и ресурсов на неправильное решение.

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

Я согласен с ОП здесь - пожалуйста, без капчи - это не очень удачный способ ведения дел.

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

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

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

Проверка ботов будет проводиться в автономном режиме через некоторое время после продажи с использованием ловушек ботов, IP-адресов, файлов cookie, сессий, строк браузера и т. Д. Проведите серьезный анализ с данными, полученными вами от покупателей, чтобы решить, кто получает botcrap. Если вы решили отправить botcrap - вы можете освободить обычную чушь, чтобы продать ее кому-то еще.

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

Вот мой дубль. Атакуйте ROI владельцев ботов, чтобы они вместо этого делали законную вещь, которую вы хотите, чтобы они делали, вместо обмана. Давайте посмотрим на это с их точки зрения. Каковы их активы? По-видимому, неограниченное количество одноразовых машин, IP-адресов и, возможно, даже большое количество неквалифицированных людей, готовых выполнять бессмысленные задачи. Чего они хотят? Чтобы всегда получить специальное предложение, которое вы предлагаете, прежде чем другие законные люди получат его.

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

Первый шаг - сделать ваше представление об аутентификации недвоичным. Я имею в виду, что для любого данного пользователя вам назначена вероятность того, что он реальный человек или бот. Вы можете использовать ряд подсказок для создания этой вероятности, многие из которых уже обсуждались в этой теме: подозрительная скорость, IP-адреса, геолокация в других странах, файлы cookie и т. Д. Мне нравится просто обращать внимание на точную версию окон они используют. Что еще более важно, вы можете дать своим постоянным клиентам четкий способ аутентификации с сильными подсказками: путем взаимодействия с сайтом, совершения покупок, участия в форумах и т. Д. Вы не обязаны делать это, но если вы делаете, то вы будет иметь небольшое преимущество, когда придет время, чтобы увидеть специальные предложения.

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

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

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

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

Надеюсь, это полезно,

Эрик

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

Как указывалось выше, я немного поработал над формами, отличными от каптчи, используя предварительно вычисленный хэш ожидаемого значения результата, сохраненного в форме. Идея работает для двух плагинов Wordpress для защиты от спама: WP-Morph и WP-HashCash . Единственным недостатком является то, что клиентский браузер должен иметь возможность интерпретировать JavaScript.

...