Во-первых, позвольте мне напомнить, что нам нужно сделать здесь. Я понимаю, что я просто перефразирую исходный вопрос, но важно, чтобы мы получили это 100% прямо, потому что есть много отличных предложений, которые дают 2 или 3 из 4 правильных, но, как я покажу, вам понадобится многогранный подход для удовлетворения всех требований.
Требование 1: избавиться от «хлопанья ботом»:
Стремительный «грохот» вашей первой страницы ухудшает производительность вашего сайта и лежит в основе проблемы. «Хлопание» происходит как от ботов с одним IP, так и, предположительно, от ботнетов. Мы хотим избавиться от обоих.
Требование 2: Не связывайтесь с опытом пользователя:
Мы могли бы довольно эффективно исправить ситуацию с ботом, внедрив неприятную процедуру проверки, например, позвонив человеку-оператору, решив кучу CAPTCHA или подобное, но это было бы как заставить любого невинного пассажира самолета прыгать через сумасшедшие обручи безопасности только для малый шанс поймать самых глупых террористов. Ой, подождите - мы на самом деле делаем это. Но давайте посмотрим, сможем ли мы , а не сделать это на woot.com.
Требование 3: Избежать «гонки вооружений»:
Как вы упоминаете, вы не хотите быть втянутыми в гонку вооружений спамботов. Таким образом, вы не можете использовать простые настройки, такие как скрытые или перемешанные поля формы, математические вопросы и т. Д., Поскольку они по сути являются мерами неясности, которые могут быть тривиально автоматически обнаружены и обойдены.
Требование 4: Срыв ботов «тревоги»:
Это может быть самым сложным из ваших требований. Даже если мы сможем выполнить эффективную задачу проверки личности, боты все равно смогут опросить вашу главную страницу и предупредить сценариста о появлении нового предложения. Мы хотим, чтобы эти боты также были неосуществимыми. Это более сильная версия первого требования, поскольку боты не только не могут выдавать быстродействующие запросы, снижающие производительность, но и не могут выдавать достаточно повторных запросов, чтобы вовремя отправить «тревогу» в сценарий, чтобы выиграть предложение.
Хорошо, давайте посмотрим, сможем ли мы удовлетворить все четыре требования. Во-первых, как я уже говорил, ни одна мера не поможет. Вам нужно будет объединить пару трюков, чтобы достичь этого, и вам придется проглотить две неприятности:
- Небольшое количество пользователей будет необходимо прыгать через обручи
- Небольшое количество пользователей не сможет получить специальные предложения
Я понимаю, что это раздражает, но если мы сможем сделать "маленькое" число достаточно маленьким , я надеюсь, что вы согласитесь, что положительные перевешивают отрицательные.
Первая мера: регулирование на уровне пользователя:
Это не просто, и я уверен, что вы уже это делаете. Если пользователь вошел в систему и продолжает обновлять 600 раз в секунду (или что-то в этом роде), вы перестаете отвечать и говорите ему, чтобы он остыл. На самом деле, вы, вероятно, дросселируете его запросы значительно раньше, но вы поняли идею. Таким образом, авторизованный бот будет заблокирован / заблокирован, как только он начнет опрашивать ваш сайт. Это легкая часть. Боты, не прошедшие проверку подлинности, - это наша настоящая проблема:
Вторая мера: некоторая форма регулирования IP, как предлагают почти все:
Неважно, что, вам нужно будет сделать некоторое регулирование на основе IP, чтобы воспрепятствовать «грохоту ботов». Поскольку для вас важно разрешить неаутентифицированным (не вошедшим в систему) посетителям получать специальные предложения, у вас изначально есть только IP-адреса, и хотя они не идеальны, они делают против боты с одним IP. Ботнеты - это другой зверь, но я вернусь к ним. На данный момент мы сделаем несколько простых ударов, чтобы победить быстрых ботов с одним IP.
Падение производительности незначительно, если вы запускаете проверку IP перед любой другой обработкой, используете прокси-сервер для логики регулирования и сохраняете IP-адреса в древовидной структуре, оптимизированной для поиска по memcached.
Третья мера: закрытие дросселя кэшированными ответами:
При быстром включении ботов с одним IP-адресом нам все еще приходится обращаться к медленным ботам с одним IP, т.е. боты, специально настроенные так, чтобы «летать под радаром», размещая запросы немного дальше друг от друга, чем предотвращает регулирование.
Чтобы мгновенно сделать медленных ботов с одним IP бесполезными, просто используйте стратегию, предложенную abelenky: обслуживайте 10-минутные кэшированные страницы всем IP-адресам, которые были обнаружены за последние 24 часа (или около того). Таким образом, каждый IP получает один «шанс» в день / час / неделю (в зависимости от выбранного периода), и не будет видимого раздражения для реальных пользователей, которые просто нажимают «перезагрузить», за исключением того, что они не выигрывают предложение.
Прелесть этой меры в том, что также мешает «тревожным ботам», если они не происходят из ботнета.
(я знаю, что вы, вероятно, предпочли бы, чтобы реальным пользователям разрешалось обновляться снова и снова, но нет способа отличить человека, обновляющего спам, от бота, рассылающего запросы, без CAPTCHA или подобного)
Четвертая мера: reCAPTCHA:
Вы правы в том, что капчи наносят вред пользовательскому опыту и его следует избегать. Однако в ситуации _one_ они могут быть вашим лучшим другом: если вы разработали очень строгую систему для предотвращения ботов, то - из-за ее ограниченности - также обнаруживается ряд ложных срабатываний; затем CAPTCHA служил в качестве крайней меры , что позволит тем реальным пользователям, которые попали в ловушку при вашем регулировании (таким образом, избегать раздражающих ситуаций DoS).
Самое приятное, конечно, это то, что ВСЕ боты попадают в вашу сеть, в то время как CAPTCHA беспокоит крайне мало реальных пользователей.
Если вы при обслуживании 10-минутных кэшированных страниц также предлагаете альтернативный необязательный проверенный CAPTCHA «переполнитель главной страницы», тогда люди, которые действительно хотите продолжать обновлять, все еще можете сделать это без получения старой кэшированной страницы, но за счет необходимости решать CAPTCHA для каждого обновления. То, что - это раздражение, , но необязательное только для преданных пользователей, которые склонны быть более снисходительными, потому что они знают , что они разыгрывают систему улучшить свои шансы, и эти улучшенные шансы не приходят бесплатно.
Пятая мера: Дерьмо-приманка:
У Кристофера Махана была идея, которая мне скорее понравилась, но я бы придал ей другое значение. Каждый раз, когда вы готовите новое предложение, готовьте также два других «предложения», которые ни один человек не выберет, например, 12-мм грецкий орех за 20 долларов. Когда предложение появится на первой странице, поместите все три «предложения» на одном изображении с номерами, соответствующими каждому предложению. Когда пользователь / бот на самом деле переходит к заказу предмета, ему нужно будет выбрать (радио-кнопку) то предложение, которое они хотят, и, поскольку большинство ботов просто догадываются, в двух из трех случаев боты будут покупать ничего не стоящие старья.
Естественно, это не относится к «ботам-будильникам», и есть (тонкий) шанс, что кто-то сможет построить бота, который сможет выбрать правильный предмет. Однако риск случайной покупки мусора должен заставить сценаристов полностью отказаться от полностью автоматизированных ботов.
Шестая мера: регулирование ботнета:
[удалено]
Хорошо ............ Теперь я провел большую часть вечера, размышляя об этом, пробуя разные подходы ... глобальные задержки ... маркеры на основе файлов cookie ... обслуживание в очереди ... "незнакомец душит" .... И это просто не работает. Это не так. Я понял, что основная причина, по которой вы еще не приняли никакого ответа, заключается в том, что никто не предложил способ предотвратить атаку распределенной / зомби-сети / ботнета .... поэтому я действительно хотел взломать его. Мне кажется, я решил проблему с ботнетом для аутентификации в другом потоке , поэтому я также возлагал большие надежды на вашу проблему. Но мой подход не относится к этому. У вас есть только IP-адреса, и достаточно большой ботнет не обнаруживает себя ни в одном анализе, основанном на IP-адресах.
Итак, вот оно у вас : Моя шестая мера - ничто. Ничего такого. Zip. Если ботнет не является маленьким и / или достаточно быстрым, чтобы попасть в обычный IP-дроссель, я не вижу каких-либо эффективных мер против бот-сетей, которые не требуют явной проверки человеком такие как CAPTHA. Извините, но я думаю, что сочетание пяти вышеперечисленных мер - ваш лучший выбор. И вы, вероятно, могли бы справиться с этим только с помощью 10-минутного кеширования Абеленки.