Как стать автором
Обновить

Естественный отбор — враг бота

Время на прочтение1 мин
Количество просмотров68K
Интересный баг только что отловили. Рассказываю.

Имеем сервис с капчами. Чтобы уменьшить время отклика логично генерировать картинки по случайному коду в свободное время в час наименьшей нагрузки. Так и делаем — ставим в крон задачку, делаем 100500 капч (картинка + код в базе) и в течение дня их показываем. На тот случай если прегенерированные капчи все-же закончатся, делаем режим аварийного полета — если отгаданная и, в связи с этим, убираемая из базы капча уменьшает общее число капч до опасного уровня (например, остается меньше 50), то генерируем новую капчу вместо убранной.

Казалось бы, простая и рабочая схема. Так и было до недавнего времени.

Посыпались жалобы что капчу невозможно разгадать. Жалобы начинали поступать исключительно после 19:00 когда все разработчики уже закрывают IDE и запускают доту. Причем, при условии правильной реализации случайной генерации капч (проверили первым делом) в конце дня все (ну или почти все) капчи стали заканчиваться на D.

Оказалось, что происходит следующее: капчи кончаются. Но, поскольку мы не убираем из базы показанные, но не разгаданные капчи, то среди прегенерированных капч начинает работать естественный отбор и к концу дня мы имеем 50 самых злых и сложных капч в мире. Дальнейшее развитие ситуации, когда взамен разгаданной капчи мы добавляем случайную — не сильно улучшает дело. Попутно мы выяснили что самая потенциально неразгадываемая буква в капчах — D, потому что при достаточной степени искажения треть юзеров интерпретирует ее как D, треть как 0 (ноль) и треть как О. А еще 46% вводят русской буквой.

Вот он, естественный отбор в действии!
Теги:
Хабы:
Всего голосов 173: ↑150 и ↓23+127
Комментарии70

Публикации

Истории

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань