Привожу полную запись из источника (пусть и полгода с неё уже прошло, а меня только сейчас порадовало):
Интересный баг только что отловили. Рассказываю.
Имеем сервис с капчами. Чтобы уменьшить время отклика логично генерировать картинки по случайному коду в свободное время в час наименьшей нагрузки. Так и делаем — ставим в крон задачку, делаем 100500 капч (картинка + код в базе) и в течение дня их показываем. На тот случай если прегенерированные капчи все-же закончатся, делаем режим аварийного полета — если отгаданная и, в связи с этим, убираемая из базы капча уменьшает общее число капч до опасного уровня (например, остается меньше 50), то генерируем новую капчу вместо убранной.
Казалось бы, простая и рабочая схема. Так и было до недавнего времени.
Посыпались жалобы что капчу невозможно разгадать. Жалобы начинали поступать исключительно после 19:00 когда все разработчики уже закрывают IDE и запускают доту. Причем, при условии правильной реализации случайной генерации капч (проверили первым делом) в конце дня все (ну или почти все) капчи стали заканчиваться на D.
Оказалось, что происходит следующее: капчи кончаются. Но, поскольку мы не убираем из базы показанные, но не разгаданные капчи, то среди прегенерированных капч начинает работать естественный отбор и к концу дня мы имеем 50 самых злых и сложных капч в мире. Дальнейшее развитие ситуации, когда взамен разгаданной капчи мы добавляем случайную — не сильно улучшает дело. Попутно мы выяснили что самая потенциально неразгадываемая буква в капчах — D, потому что при достаточной степени искажения треть юзеров интерпретирует ее как D, треть как 0 (ноль) и треть как О. А еще 46% вводят русской буквой.
Вот он, естественный отбор в действии!
вторник, 17 февраля 2015 г.
Подписаться на:
Комментарии к сообщению (Atom)
Хотите поделиться ссылкой? Добавьте в закладки:
Комментариев нет:
Отправить комментарий