Подтвердить что ты не робот

Остановка сценаристов от хлопания вашего сайта сотни раз в секунду

[обновление] Я принял ответ, поскольку lc заслуживает щедрости из-за хорошо продуманного ответа, но, к сожалению, я считаю, что мы застряли в нашем первоначальном худшем случае: CAPTCHA каждый на покупку попытки дерьма. Краткое объяснение: кеширование/веб-фермы не позволяют нам фактически отслеживать хиты, и любое обходное решение (отправка не кэшированного веб-маяка, запись в единую таблицу и т.д.) Замедляет работу сайта хуже, чем боты. Скорее всего, некоторые дорогостоящие аппаратные средства от Cisco и т.п. Могут помочь на высоком уровне, но трудно оправдать стоимость, если CAPTCHAING - это альтернатива. Я попытаюсь сделать более полное объяснение здесь позже, а также очистить его для будущих поисковиков (хотя другие могут попробовать, так как это сообщество wiki).

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

Я буду немного понятнее, чем раньше: речь идет о продажах сумки на woot.com. Я президент Woot Workshop, дочерняя компания Woot, которая занимается дизайном, записывает описания продуктов, подкасты, сообщения в блогах и модерирует форумы. Я работаю в мире css/html, и я едва знаком с остальной частью мира разработчиков. Я тесно сотрудничаю с разработчиками и рассказал здесь все ответы (и многие другие идеи, которые у нас были).

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


Чтобы настроить сценарий немного больше, боты захлопывают нашу первую страницу десятки раз в секунду скрипинг (и/или сканирование нашего rss) для продажи Random Crap. В тот момент, когда они видят это, он запускает второй этап программы, которая входит в систему, клики Я хочу один, заполняет форму и покупает дерьмо.


В текущем (2/6/2009) порядке голосов:

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

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

О, и люди, называющие нас, были бы самым худшим сценарием. Можем ли мы позвонить вам?

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

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

novatrust И я, например, приветствую наших новых ботов-повелителей. Мы действительно предлагаем rss-каналы, чтобы сторонние приложения могли сканировать наш сайт для информации о продукте, но не раньше основного html-сайта. Если я правильно понимаю, ваше решение помогает цели 2 (проблемы с производительностью), полностью жертвуя целью 1, и просто уклоняется от того, что боты будут покупать большую часть дерьма. Я поддержал ваш ответ, потому что ваш последний абзац пессимизм чувствует себя точной. Здесь, похоже, нет серебряной пули.

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

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


END UPDATE, следующий исходный вопрос:

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

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

  • Ваш сайт захлопнулся не людьми, замедляя все для всех.

  • Сценаристы в конечном итоге "выигрывают" продукт, заставляя завсегдатаев чувствовать себя обманутыми.

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

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

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

III. Даже если сценаристы не могут "решить" вашу настройку, в конце концов, это не мешает им взломать вашу первую страницу, а затем звучит сигнал тревоги для скриптора, чтобы заполнить заказ по-человечески. Учитывая, что они получают преимущество от решения [a], они, вероятно, все равно выиграют [b], так как они станут первыми людьми, достигшими страницы заказа. Кроме того, 1. все еще происходит, вызывая ошибки сервера и снижая производительность для всех.

Еще одно решение - следить за тем, чтобы IP-адреса попадали слишком часто, блокировали их из брандмауэра или иным образом препятствовали их упорядочению. Это может решить 2. и предотвратить [b], но производительность, получаемая при проверке IP-адресов по мере их поступления, массивна и, вероятно, вызовет больше проблем, таких как 1. чем сценаристы сами по себе. Кроме того, присутствие облачных сетей и зомби-спамботов делает проверку IP довольно бесполезной.

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


Мои конечные цели с некоторым решением:

  • Продайте элемент для людей, не владеющих скриптами.

  • Держите сайт на скорости, не замедляемой ботами.

  • Не мешайте "нормальным" пользователям выполнять любые задачи, чтобы доказать, что они люди.

4b9b3361

Ответ 1

Как реализовать что-то вроде SO с CAPTCHA?

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

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


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

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

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


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

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

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

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


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

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

Ответ 2

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

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

Ответ 3

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

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

  • Зарегистрировать и идентифицировать любые повторные нападающие.

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

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

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

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

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

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

Недостатки

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

Как вы думаете?

Ответ 4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что это такое, пару раз/месяц?

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

Ответ 5

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

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

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

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

...

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

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

Запускайте время-испытания реальных людей, реагирующих на это, и игнорируйте ( "oops, error, sorry, please again again" ) ответы быстрее, чем (скажем) половину этого времени. Это событие также должно вызывать предупреждение разработчикам, что хотя бы один бот вычислил код/​​игру, поэтому пришло время изменить код/​​игру.

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

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

EDIT: другой вариант, помимо использования изображений, заключается в использовании javascript для заполнения текста buy/no-buy; боты редко интерпретируют javascript, поэтому они не видят его

Ответ 6

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

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

Еще одна идея - реализовать случайные падения цен в течение периода продажи сумки. Кто купит случайную сумку за 150 долларов, когда вы ОЧЕНЬ СОСТОЯТЬ, что она стоит всего 20 долларов? Никто, кроме переутомленных ботов. Но затем через 9 минут это $35 долларов... затем через 17 минут это 9 долларов. Или что-то еще.

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

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

Ответ 7

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

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

Во-первых, всегда предлагайте "сумку" или "дерьмо".

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

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

Простой, нет?

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

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

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

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

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

Ответ 8

  • Продайте элемент для людей, не владеющих скриптами.

  • Держите сайт на скорости, не замедляемой ботами.

  • Не мешайте "нормальным" пользователям выполнять любые задачи, чтобы доказать, что они люди.

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

On the Internet, nobody knows you're a dog

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

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

Ответ 9

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

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

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


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

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

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

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

  • Просмотр главной страницы
  • Заказ

Вы не можете поместить блокировку # 1 для отслеживания, которая потеряет реальных клиентов ( "Что? Я должен решить капчу каждый раз, когда хочу увидеть последний woot?!?" ).

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

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

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

Сначала избавьтесь от простых ботов

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

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

-Adam

Ответ 10

Отказ от ответственности: этот ответ полностью не связан с программированием. Тем не менее, он пытается атаковать причину сценариев в первую очередь.

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

Есть много других вариантов, и я уверен, что другие могут подумать о некоторых других:

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

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

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

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

Ответ 11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 12

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

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

Для проверки IP-адресов существуют прокси-серверы и бот-сети. Есть скрипты чтения captcha, которые очень хороши. Есть даже команды рабочих в Индии, которые побеждают капчу за небольшую цену. Любое решение, которое вы можете придумать, может быть разумно побеждено. Даже решения Ned Batchelder можно преодолеть с помощью элемента управления WebBrowser или другого имитируемого браузера в сочетании с списком ботнета или прокси.

Ответ 13

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

Ответ 14

Как насчет введения задержки, которая требует взаимодействия с человеком, как своего рода "игра CAPTCHA". Например, это может быть небольшая флеш-игра, в которой за 30 секунд они должны расколоть клетчатые шарики и избежать разрыва твердых мячей (избегая проблем с цветной слепотой!). В игре будет задано семя случайных чисел, и то, что игра передает на сервер, будут координатами и отметками времени щелкнутых точек вместе с используемым семени.

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

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

Ответ 15

Во-первых, позвольте мне вспомнить, что нам нужно сделать здесь. Я понимаю, что просто перефразирую исходный вопрос, но важно, чтобы мы получили это на 100% прямо, потому что есть много замечательных предложений, которые получают 2 или 3 из 4 вправо, но, как я продемонстрирую, вам понадобится многогранный подход для покрытия всех требований.

Требование 1: избавление от "бот-хлопания":

Быстрое "захлопывание" вашей главной страницы ухудшает производительность вашего сайта и лежит в основе проблемы. "Шлем" происходит как от ботов с одним IP-адресом, так и от предположительно - от бот-сетей. Мы хотим избавиться от обоих.

Требование 2: Не связывайтесь с опытом пользователя:

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

Требование 3: Избегать "гонки вооружений":

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

Требование 4: Разблокировать "тревожные" боты:

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


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

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

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

Первая мера: Пользовательское дросселирование:

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

Второе измерение: некоторая форма регулирования IP, как это предлагает почти каждый:

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

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

Третья мера: Закрашивание дроссельной заслонки с помощью кешированных ответов:

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

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

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

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

Четвертая мера: reCAPTCHA:

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

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

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

Пятая мера: "Приманка":

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

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

Шестой показатель: дросселирование ботнета:

[удалено]

Хорошо............ Я провел большую часть своего вечера, думая об этом, пытаясь использовать разные подходы.... глобальные задержки.... маркеры на основе файлов cookie.. в очереди... "странное дросселирование"... И это просто не работает. Это не так. Я понял, что главная причина, по которой вы не приняли никакого ответа, заключалась в том, что никто не предлагал способ сорвать атаку распределенной/зомби-сети/ботнета..., поэтому я действительно хотел ее взломать. Я считаю, что я взломал проблему ботнета для аутентификации в другом потоке, поэтому я также возлагал большие надежды на вашу проблему. Но мой подход к этому не переводится. У вас есть только IP-адреса, и достаточно большой бот-сет не обнаруживается в любом анализе на основе IP-адресов.

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

Ответ 16

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

Если ваша главная проблема связана с ухудшением производительности, и вы смотрите на истинный hammering, тогда вы действительно имеете дело с DoS-атакой, и вам, вероятно, следует попытаться обработать ее соответствующим образом. Один общий подход заключается в простое удаление пакетов из IP-адреса в брандмауэре после нескольких подключений в секунду/минуту/и т.д. Например, стандартный брандмауэр Linux, iptables, имеет стандартную функцию сопоставления операций hashlimit, которая может использоваться для корреляции запросов соединения на единицу времени с IP-адресом.

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

EDIT:
Как отметил novatrust, все еще интернет-провайдеры фактически НЕ назначают IP-адреса своим клиентам, так эффективно, script -клиент такого провайдера отключит всех клиентов от этого провайдера.

Ответ 17

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

Конечно, множественные люди могут поступать с одного и того же IP-адреса, если они подключены к сетевому соединению NAT, но маловероятно, что человек будет возражать против вашего времени отклика на 2 мс до 4 мс (или даже 400 мс), тогда как бот будет очень затруднено из-за увеличения задержки.

Ответ 18

  • Предоставьте RSS-канал, чтобы они не ешьте свою полосу пропускания.
  • При покупке, заставит всех ждать случайного время до 45 секунд или что-то в зависимости от того, что вы точно ищете. В точку каковы ваши временные ограничения?
  • Дайте всем 1 минуту нарисовать свое имя для рисунка, а затем произвольно выберите людей. Я думаю, что это самый справедливый способ.
  • Контролировать учетные записи (включать несколько раз в сеанс и хранить их?) и добавлять задержки к учетным записям, которые выглядят как ниже порога скорости человека. Это, по крайней мере, заставит ботов запрограммировать на замедление и соревнование с людьми.

Ответ 19

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

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

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

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

Итак, первый посетитель (позвоните ему Бобу), чтобы этот автодилер получил отказ, и отправляется в офис DMV (который удобно расположен по соседству) для получения водительских прав.

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

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

Лицензия на водительские права в этом мире практически невозможно подделать.

Посещение DMV предполагает сначала получить форму заявки в очереди "Начать здесь". Боб должен принять заполненное приложение к окну №1, где первый из многих угрюмых государственных служащих возьмет свое приложение, обработает его, и если все будет в порядке, отметьте приложение для окна и отправьте его в следующее окно. Итак, Боб идет из окна в окно, ожидая, пока каждый шаг его приложения пройдет, пока он, наконец, не доберется до конца и не получит свою водительскую лицензию.

Нет смысла пытаться "закоротить" DMV. Если формы не заполняются правильно в трех экземплярах или какие-либо неправильные ответы, заданные в любом окне, приложение разрывается, а несчастный клиент отправляется обратно в начало.

Интересно, что, независимо от того, насколько полный или пустой офис, требуется примерно столько же времени, чтобы обслуживаться в каждом последующем окне. Даже когда вы единственный человек в очереди, кажется, что персоналу нравится заставлять вас ждать минуту за желтой линией, прежде чем произносить "Далее!"

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

Немного более техническое объяснение:

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

Этот подход, вероятно, требует обработки на стороне клиента AJAX-y. Бренд-шпало-новый посетитель woot получил "Приветствую нового пользователя!". страница с текстом и графикой, которая (посредством соответствующего дросселирования на стороне сервера) занимает всего несколько секунд, чтобы полностью загрузить. Хотя это происходит (и посетитель, по-видимому, занят чтением приветственных страниц), его идентификационный токен медленно собирается.

Скажем, для обсуждения токен (так называемая "водительская лицензия" ) состоит из 20 блоков. Чтобы получить каждый последующий фрагмент, клиентский код должен отправить действительный запрос на сервер. Сервер включает преднамеренную задержку (скажем, 200 миллисекунд), перед отправкой следующего фрагмента вместе с "штампом", необходимым для выполнения следующего запроса куска (т.е. штампов, необходимых для перехода от одного окна DMV к другому). Все сказанное должно пройти около 4 секунд для завершения процесса chunk-challenge-response-chunk-challenge-response -...- chunk-challenge-response-completion.

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

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

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

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

Ответ 20

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

Вот некоторые идеи, которые затрудняют запись ботов:

  • Требуется выполнить функцию javascript. Javascript заставляет больно писать бота. Может потребоваться captcha, если они не запускают javascript, чтобы по-прежнему разрешать фактическим пользователям, не являющимся javascript (минимальными).

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

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

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

  • Вы можете пойти еще дальше и использовать Flash-контент. Flash - это полная боль, чтобы написать бота.

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

Ответ 21

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

Ответ 22

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

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

И, да, технология DDOS определенно существует, которая победит эту схему, но он не видит, что это происходит в реальном мире. Напротив, он говорит, что это значительно снизило нагрузку на его серверы.

Ответ 23

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

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

Ответ 24

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

Как я понимаю, боты настроены людьми искренне, пытаясь купить мешки, которые вы продаете. Проблема -

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

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

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

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

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

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

Асаф

Ответ 25

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

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

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

Ответ 26

Предотвращение DoS приведет к победе над # 2 целей @davebug, которые он изложил выше, "Держите сайт на скорости, не замедленной ботами", но не обязательно будет решать # 1, "Продать предмет для людей без скриптинга"

Я уверен, что скриптер мог написать что-нибудь, чтобы кататься под чрезмерным пределом, который все еще был бы быстрее, чем человек мог бы пройти через формы заказа.

Ответ 27

Хорошо, поэтому спамеры не конкурируют с обычными людьми, чтобы выиграть аукцион "болота дерьма"? Почему бы не сделать следующий аукцион не буквенным "мешком с дерьмом"? Спамеры получают хорошие деньги за мешок с собачкой, и мы все смеемся над ними.

Ответ 28

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

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

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

Ответ 29

Откуда вы знаете, что сценаристы размещают заказы?

Суть вашей проблемы в том, что вы не можете отделять сценаристов от законных пользователей и, следовательно, не можете их блокировать, так как вы знаете, что есть сценаристы вообще?

Если у вас есть способ ответить на этот вопрос, у вас есть набор характеристик, которые вы можете использовать для фильтрации сценариев.

Ответ 30

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

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

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