Метод, используемый Woot для борьбы с этой проблемой, меняет игру - буквально. Когда они представляют чрезвычайно желаемый предмет для продажи, они заставляют пользователей играть в видеоигры, чтобы заказать его.
Мало того, что это успешно борется с ботами (они могут легко вносить незначительные изменения в игру, чтобы избежать автоматических игроков, или даже предоставлять новую игру для каждой продажи), но также создает впечатление, что пользователи "выигрывают" желаемый предмет. при замедлении процесса заказа.
Это все еще продается очень быстро, но я думаю, что решение хорошее - переоценка проблемы и изменение параметров привели к успешной стратегии, где просто технических решений просто не было.
Вся ваша бизнес-модель основана на принципах «первым пришел - первым обслужен». Вы не можете сделать то, что сделали радиостанции (они больше не делают первого звонящего победителем, они делают 5-го, 20-го или 13-го звонящего победителем) - это не соответствует вашей основной функции.
Нет, нет способа сделать это без изменения порядка заказов для реальных пользователей.
Допустим, вы реализуете все эти тактики. Если я решу, что это важно, я просто заставлю 100 человек работать со мной, мы создадим программное обеспечение для работы на наших 100 отдельных компьютерах и будем заходить на ваш сайт 20 раз в секунду (5 секунд между обращениями для каждого пользователя / cookie / аккаунт / IP-адрес).
У вас есть два этапа:
- Просмотр титульной страницы
- Заказ
Вы не можете поставить блокировку капчи № 1 - это приведет к потере реальных клиентов («Что? Мне нужно разрешить капчу каждый раз, когда я хочу увидеть последний запрос?!?»).
Итак, моя маленькая группа следит за тем, чтобы вместе мы получали около 20 проверок в секунду, и тот, кто увидит изменение, сначала предупреждает всех остальных (автоматически), кто снова загрузит первую страницу, перейдет по ссылке заказа и выполнит транзакция (которая также может происходить автоматически, если вы не внедрите капчу и не измените ее для каждого wootoff / boc).
Вы можете поставить капчу перед # 2, и, хотя вы не хотите это делать, это может быть единственным способом убедиться, что даже если боты смотрят главную страницу, реальные пользователи получают продукты.
Но даже с капчей моя маленькая группа из 100 все равно имела бы значительное преимущество первопроходца - и вы никак не могли бы сказать, что мы не люди. Если вы начнете синхронизировать наши обращения, мы просто добавим немного дрожания. Мы могли случайным образом выбрать, какой компьютер должен был обновляться, поэтому порядок доступа постоянно меняется, но все равно выглядит достаточно похожим на человека.
Во-первых, избавьтесь от простых ботов
Вам нужен адаптивный брандмауэр, который будет наблюдать за запросами, и если кто-то делает очевидную глупость - обновляет более одного раза в секунду на одном и том же IP-адресе, то использует тактику для их замедления (отбрасывание пакетов, отправка обратно, отказ или 500). ошибки и т. д.).
Это должно значительно снизить ваш трафик и изменить тактику, которую используют пользователи ботов.
Во-вторых, сделайте сервер невероятно быстрым.
Вы действительно не хотите это слышать ... но ...
Я думаю, что вам нужно полностью настраиваемое решение снизу вверх.
Вам не нужно связываться со стеком TCP / IP, но вам может потребоваться разработка очень, очень, очень быстрого настраиваемого сервера, специально предназначенного для корреляции пользовательских соединений и надлежащего реагирования на различные атаки.
Apache, lighthttpd и т. Д. Отлично подходят для гибкости, но вы запускаете веб-сайт одного назначения, и вам действительно нужно уметь делать больше, чем способны нынешние серверы (как в обработке трафика, так и в соответствующим образом борясь с ботами).
Предоставляя в основном статическую веб-страницу (обновляемую каждые 30 секунд или около того) на пользовательском сервере, вы не только сможете обрабатывать в 10 раз больше запросов и трафика (поскольку сервер не делает ничего, кроме получения запроса) и чтение страницы из памяти в буфер TCP / IP), но это также даст вам доступ к метрикам, которые могут помочь вам замедлить работу ботов. Например, сопоставляя IP-адреса, вы можете просто заблокировать более одного соединения в секунду на один IP. Люди не могут двигаться быстрее этого, и даже люди, использующие один и тот же NAT-адрес, будут блокироваться редко. Вы хотели бы сделать медленный блок - оставьте соединение в покое на целую секунду, прежде чем официально завершить сеанс. Это может привести к брандмауэру, чтобы дать более длительные блоки особенно вопиющим преступникам.
Но реальность такова, что независимо от того, что вы делаете, нет никакого способа отличить человека от бота, когда он специально создан человеком для одной цели. Бот - это просто прокси для человека.
* * Заключение тысячи сорок-девять
В конце концов, вы не можете отличить человека от компьютера за просмотр главной страницы. Вы можете остановить ботов на этапе заказа, но у пользователей ботов все еще есть преимущество первопроходца, и у вас все еще есть огромная нагрузка для управления.
Вы можете добавить блоки для простых ботов, которые поднимут планку, и с ней будет меньше людей. Этого может быть достаточно.
Но без изменения базовой модели вам не повезло. Лучшее, что вы можете сделать, - это позаботиться о простых случаях, сделать сервер настолько быстрым, что обычные пользователи не заметят, и продать столько товаров, что даже если у вас будет несколько миллионов ботов, их получит столько обычных пользователей, сколько они захотят. .
Вы можете рассмотреть возможность создания honeypot и пометить учетные записи пользователей как пользователей ботов, но это будет иметь негативную обратную реакцию сообщества.
Каждый раз, когда я думаю о «ну, как насчет этого ...», я всегда могу противопоставить это подходящей стратегии бота.
Даже если вы сделаете первую страницу капчей, чтобы попасть на страницу заказа («Кнопка заказа этого элемента синяя с розовыми блестками, где-то на этой странице»), боты просто откроют все ссылки на странице и используют в зависимости от того, кто возвращается со страницей заказа. Это просто невозможно победить.
Сделайте серверы быстрыми, вставьте reCaptcha (единственный, который я нашел, который нелегко обмануть, но, вероятно, он слишком медленный для вашего приложения) на странице заказа, и подумайте, как изменить модель немного, поэтому у обычных пользователей такой же шанс, как и у ботов.
-Adam