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

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

Как насчет реализации чего-либо, подобного SO, с CAPTCHA?

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

Если они не пройдут проверку x раз подряд (скажем, 2 или 3), дайте этому IP тайм-аут или другую такую ​​меру. Затем по истечении времени ожидания снова отправьте их обратно на проверку.


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

Если вы ловите слишком много невинных, вы можете разместить на странице проверки человека отказ от ответственности: «Эта страница может также появиться, если слишком много анонимных пользователей просматривают наш сайт из того же места. Мы рекомендуем вам зарегистрироваться или войдите, чтобы избежать этого. " (Отрегулируйте формулировку соответствующим образом.)

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


Редактировать: Другой вариант - если они выходят из строя слишком много раз, и вы уверены в спросе на продукт, заблокировать их и заставить их лично ПОЗВОЛИТЬ вам снять блок.

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

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

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


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

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

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

Вам нужно найти способ заставить ботов покупать вещи с завышенной ценой: 12-миллиметровый барашек: 20 долларов. Посмотрите, сколько ботов подхватили, прежде чем сценаристы решат, что вы играете в них.

Используйте прибыль, чтобы купить больше серверов и оплатить пропускную способность.

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

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

Вот как бы я это сделал:

  • Регистрируйте и идентифицируйте всех повторных нападающих.

Вам не нужно регистрировать каждый IP-адрес при каждом попадании. Только отслеживать один из каждых 20 хитов или около того. Повторный преступник все равно будет обнаружен в случайном случайном слежении.

  • Сохраняйте кеш своей страницы примерно на 10 минут раньше.

  • Когда повторяющийся нападающий / бот попадает на ваш сайт, дайте им 10-минутную кешированную страницу.

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

Преимущества:

  • Нет проблем или проблем для пользователей (например, CAPTCHA).
  • Реализован полностью на стороне сервера. (не зависит от Javascript / Flash)
  • Обслуживание старой кэшированной страницы должно быть менее ресурсоемким, чем живая страница. Таким образом, вы можете уменьшить нагрузку на свои серверы!

Недостатки

  • Требуется отслеживание некоторых IP-адресов
  • Требуется хранение и поддержка кэша старых страниц.

Что вы думаете?

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

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

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

Эта техника, как я предотвращаю спам-боты на этом сайте. Оно работает. описанный здесь метод не смотрит на содержание вообще.

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

  • Создайте официальный механизм автоматического уведомления (RSS-канал? Twitter?), На который люди могут подписаться, когда ваш продукт поступит в продажу. Это уменьшает необходимость для людей, которые делают сценарии.
  • Измените свою технику запутывания прямо перед , новый предмет поступит в продажу. Поэтому, даже если авторы сценария могут усилить гонку вооружений, они всегда отстают на один день.

РЕДАКТИРОВАТЬ: Чтобы быть совершенно ясным, в статье Неда выше описаны методы, позволяющие предотвратить автоматизированную ПОКУПКУ предметов, предотвращая прохождение BOT через формы для отправки заказа. Его методы не будут полезны для предотвращения того, чтобы боты соскребали домашнюю страницу с экрана, чтобы определить, когда Bandoler of Carrots появится в продаже. Я не уверен, что предотвратить это действительно возможно.

Что касается ваших комментариев об эффективности стратегий Неда: Да, он обсуждает приманки, но я не думаю, что это его самая сильная стратегия. Его обсуждение SPINNER является первоначальной причиной, по которой я упомянул его статью. Извините, я не прояснил это в своем оригинальном сообщении:

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

  • Метка времени,
  • IP-адрес клиента,
  • Идентификатор записи в блоге, который комментируется, и
  • Секрет.

Вот как вы могли бы реализовать это на WOOT.com:

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

Даже если кто-то сможет быстро перестроить свой бот, все остальные пользователи уже купили BOC, и ваша проблема решена!

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

  • Используйте классы CSS (конечно же, рандомизированные), чтобы установить отображение полей или содержащего элемента: нет.
  • Раскрасьте поля таким же (или очень похожим) фоном страницы.
  • Используйте позиционирование, чтобы переместить поле за пределы видимой области страницы.
  • Сделать элемент слишком маленьким, чтобы показать содержащееся в нем поле honeypot.
  • Оставьте поля видимыми, но используйте позиционирование, чтобы покрыть их затемняющим элементом.
  • Используйте Javascript для осуществления любого из этих изменений, для чего у бота должен быть полный движок Javascript.
  • Оставьте приманки такими же, как в других полях, но просите людей не вводить в них ничего.

Полагаю, моя общая идея - ИЗМЕНИТЬ ДИЗАЙН ФОРМЫ, когда каждый новый предмет поступает в продажу. Или, по крайней мере, измените его, когда новый BOC поступит в продажу.

Что, пару раз в месяц?

Если вы примете этот ответ, вы дадите мне знать, когда придет следующий? :)

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

В: Как бы вы помешали сценаристам отбивать ваш сайт сотни раз в секунду?
A: Вы не делаете. Невозможно предотвратить подобное поведение внешних агентов.

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

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

Как ты это делаешь? Ну, это другой вопрос! ; -)

...

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

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

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

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

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

РЕДАКТИРОВАТЬ: другой вариант, помимо использования изображений, заключается в использовании javascript для заполнения текста покупки / не покупки; боты редко интерпретируют javascript, поэтому они не увидят его

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

Я не знаю, насколько это возможно: ... перейти в наступление.

Выясните, какие данные сканируют боты. Подайте им данные, которые они ищут, когда вы НЕ продаете дерьмо. Делайте это так, чтобы не беспокоить и не запутывать пользователей. Когда боты запустят вторую фазу, они войдут в систему и заполнят форму, чтобы купить roombas за 100 долларов вместо BOC. Конечно, это предполагает, что боты не особенно устойчивы.

Другая идея заключается в реализации случайных падений цен в течение периода продажи сумок. Кто купил бы случайную дерьмовую сумку за 150 долларов, когда вы ясно заявили, что она стоит всего 20 долларов? Никто, кроме чрезмерно усердных ботов. Но через 9 минут это 35 долларов ... потом через 17 минут это 9 долларов. Или что угодно.

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

Все это предполагает, что вы хотите разозлить некоторых бот-лордов, что не рекомендуется на 100%.

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

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

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

Во-первых, всегда предлагают "bag 'o crap".

Во-вторых, убедитесь, что дерьмо обычно дерьмо.

В-третьих, часто вращайте дерьмо.

Просто, нет?

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

Когда бот видит, что дерьмо есть, и дрянь автоматически покупается, получатель будет ужасно расстроен тем, что заплатил 10 долларов за сломанную зубочистку. А потом пустой мешок для мусора. А потом немного грязи со дна вашей обуви.

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

Черт, ваши постоянные клиенты могут быть настолько удивлены, что вы можете превратить это в огромную маркетинговую победу. Начните публиковать информацию о том, сколько карпа продается. Люди вернутся, чтобы посмотреть, как сильно укушены боты.

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

15 голосов
/ 07 февраля 2009
  1. Продайте предмет людям, не пишущим сценарий.

  2. Поддерживайте работу сайта на скорости, не замедленной ботами.

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

Возможно, вы не хотите это слышать, но # 1 и # 3 являются взаимоисключающими.

On the Internet, nobody knows you're a dog

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

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

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

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

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

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


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

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

Допустим, вы реализуете все эти тактики. Если я решу, что это важно, я просто заставлю 100 человек работать со мной, мы создадим программное обеспечение для работы на наших 100 отдельных компьютерах и будем заходить на ваш сайт 20 раз в секунду (5 секунд между обращениями для каждого пользователя / cookie / аккаунт / IP-адрес).

У вас есть два этапа:

  1. Просмотр титульной страницы
  2. Заказ

Вы не можете поставить блокировку капчи № 1 - это приведет к потере реальных клиентов («Что? Мне нужно разрешить капчу каждый раз, когда я хочу увидеть последний запрос?!?»).

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

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

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

Во-первых, избавьтесь от простых ботов

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

Это должно значительно снизить ваш трафик и изменить тактику, которую используют пользователи ботов.

Во-вторых, сделайте сервер невероятно быстрым.

Вы действительно не хотите это слышать ... но ...

Я думаю, что вам нужно полностью настраиваемое решение снизу вверх.

Вам не нужно связываться со стеком TCP / IP, но вам может потребоваться разработка очень, очень, очень быстрого настраиваемого сервера, специально предназначенного для корреляции пользовательских соединений и надлежащего реагирования на различные атаки.

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

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

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

* * Заключение тысячи сорок-девять

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

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

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

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

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

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

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

-Adam

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

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

Я думаю, что требуется другое мышление

  • Не пытайтесь остановить ботов от использования вашего сайта
  • Не идите на исправление, которое работает сразу, играйте в длинную игру

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

Запишите время, когда вы публикуете предложение, и время, когда аккаунт решает его купить.

Это дает вам отчет о том, как быстро клиент покупает вещи.

Измените время суток, когда вы публикуете предложения.

Например, есть 3-часовое окно начиная с какого-то непонятного времени день (полночь?) только боты и отшельники будет постоянно обновлять страницу на 3 часов, чтобы получить заказ в течение секунд. Никогда не меняйте базовое время, только размер окна.

Со временем появится изображение.

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

02: Вы также можете посмотреть на окно времени, использованное для предложений, если оно составляет 1 час, то ранними покупателями будут люди. Человек редко обновляется в течение 4 часов. Если прошедшее время между публикацией / покупкой не зависит от продолжительности окна, то это бот. Если время публикации / покупки мало для маленьких окон и увеличивается для больших окон, это отшельник!

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

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

Обработка заказов в очереди:

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

  1. Ваш заказ был размещен и находится в очереди.
  2. Ваш заказ был обработан.
  3. Ваш заказ отправлен.

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

...