Кто придумал капчу


Как это работает: CAPTCHA

Сколько лет существует Хабр — столько лет на нём регулярно появляются посты про очередную капчу — будь то скрипт генерации картинки, новая идея капчи с котиками и тому подобное. Самый свежий пример того, что человек не совсем понимает — как же всё таки должна работать капча (см. текст поста и последние комментарии), но при этом делится своими заблуждениями с сообществом. Складывается ощущение, что капча — это такая terra incognita для большинства разработчиков — как для тех, кто просто прикручивает её к очередной форме в надежде на то, что она будет работать «из коробки», так и для тех кто придумывает капчи вроде тех, на которых надо выбрать картинку с котиком из нескольких фото. Статья содержит полезную информацию для тех, кто использует капчу на своём сервере, вместо того чтобы довериться стороннему сервису вроде reCaptcha. А для затравки — если вы считаете, что такая проверка капчи будет работать:

if($_POST['captcha'] == $_SESSION['captcha']) return true; (пример из практики)

то вы глубоко заблуждаетесь.

Captcha

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

Два главных свойства капчи

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

Устойчивость к распознаванию — свойство, защищающее капчу от распознавания алгоритмом — например системой распознавания текста. Гарантирует то, что человек сможет прочитать текст на картинке, а компьютер нет.

Антипример: стандартная капча форумов phpBB 2.x таким свойством не обладала — из-за относительной простоты распознавания появились скрипты, которые спамили все подряд форумы вынуждая веб-мастеров менять капчу на более стойкую.

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

Антипример: арифметическая капча вроде «1+2» (перебор чисел от 1 до 20 в скором времени даст результат). Антипример: выбрать из нескольких картинок ту, на которой изображён котик.

Проверка капчи

Значение для проверки должно храниться на сервере, а не передаваться вместе с картинкой в браузер. Для сопоставления посетителя и правильного значения капчи необходимо использовать некий ключ, который передаётся вместе с капчей (идентификатор сессии, номер капчи и т.п.) Антипример: если передавать саму капчу и значение для ее проверки (в том числе зашифрованное), то человеку достаточно один раз распознать такую капчу и далее использовать комбинацию «ответ»-«значение для проверки» в своём скрипте (по ссылке в начале поста как раз такой случай)

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

Антипример: уже упомянутый мной код if($_POST['captcha'] == $_SESSION['captcha']) return true; Причем этот код был написан опытным программистом.

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

Антипример: гипотетическая форма логина, в которой достаточно один раз ввести капчу правильно, и далее подбирать пароль скриптом, избегая перегенерации капчи на сервере.

Пуленепробиваемая капча

Защита от перебора. Если ваша капча устойчива к распознаванию, но не очень устойчива к перебору (например на ней надо прочитать всего 3-4 цифры), желательно ограничить число неправильных ответов «с одного ip» / «для одного логина» / etc. Такие ограничения необходимо проверять ДО проверки самой капчи (то есть даже в случае правильно введенной капчи, при наличии ограничения она не должна считаться пройденной) иначе оно не будет препятствовать перебору.

Защита от DoS. При генерации капчи на своем сервере, надо понимать что это удобный вектор проведения DoS атак (которую, в отличие от DDoS, может устроить любой школьник). Для защиты можно ограничить число генерации капчи для одного ip, кэшированием капч и т.д. Подробнее про это

Защита от распознавания. Если вы выбираете капчу, или вдруг собираетесь написать её сами, желательно понимать какая капча более защищена от распознавания. Существуют готовые универсальные скрипты распознавания капчи, работающие по принципу OCR, а в случае если ваш сайт заинтересует спамеров есть риск, что будут использовать / писать скрипт конкретно под вашу капчу. Последнее правда относится больше к сайтам уровня Яндекс или vk, а вот вариант с защитой от банальных OCR желательно предусмотреть.

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

Тут нет и не может быть «золотого стандарта» (ибо в таком случае антигейты внедрят его поддержку), поэтому вы вольны дополнять капчу любыми ухищрениями, чтобы сделать её распознавание через антигейт невозможным. Например: — нестандартная капча (сбор паззла, поворот изображения, клик по области на фото и т.п.); — кириллическая капча — самое простое решение, но имеет ряд минусов: подходит только для проектов с русскоязычной аудиторией, есть антигейты с поддержкой кириллицы; — использование виртуальной клавиатуры рядом с капчей для ввода нестандартных символов или фигур (может быть неудобно пользователям мобильных);

Юзабилити

Не просите ввести капчу, если вы уже убедились, что перед вами человек. Тут однако, надо быть осторожным, чтобы форму нельзя было использовать скриптом неограниченное число раз после однократного ввода капчи человеком. Пример: форма регистрации. Если я где-то регистрируюсь, и забыл ввести поле «почтовый индекс», но правильно ввёл капчу — не надо показывать мне новую. Потратьте 10 минут на то, чтобы сохранить где-то у себя, что вот эту конкретную форму сейчас пытается заполнить живой человек. Для облегчения распознавания человеком: не используйте в капче одновременно буквы и цифры, не используйте одновременно прописные и строчные буквы, исключите похожие символы.

Отказ от использования капчи

Лучшая капча — отсутствие капчи. Там где можно отказаться от её использования — это надо сделать. Возможно для этого придется реализовать дополнительные лимиты и проверки, но пользователи скажут вам спасибо. Но тут надо быть очень осторожным. Например: форма регистрации без капчи, с полем email на который приходит письмо с активацией. Без дополнительных средств защиты такую форму могут завалить «левыми» адресами, и ваш сайт включат в черные списки почтовые службы. В таком случае можно обходиться без капчи, но только если у вас есть другой рубеж защиты, вроде лимита по ip.

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

Метки:

habr.com

Что такое «капча»?

Пользователи Интернета часто сталкиваются с «капчой». Например, вы регистрируете свой сайт в Google. Кроме URL и краткого описания вашего сайта, вам нужно — перед завершением регистрации — в специальное текстовое поле ввести цифры, изображенные на рисунке.

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

Что такое CAPTCHA? CAPTCHA (от англ. Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей) — компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером. Термин появился в 2000 г.

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

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

Что интересно: хотя CAPTCHA предназначена для «отсеивания» компьютеров, тест проводит компьютер (точнее, программа, которая сравнивает ответ с правильным).

Варианты CAPTCHA В наиболее распространенном варианте CAPTCHA от пользователя требуется ввести символы, изображенные на предлагаемом рисунке в искаженном виде (с добавлением «шума» или полупрозрачности).

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

Могут также применяться другие плохо алгоритмизуемые задачи, например: узнать, что находится на картинке, отметить все картинки с животными или ответить на вопрос, связанный со знаниями или менталитетом людей (например, «Сколько ног у курицы?» или «Как зовут российского президента?»).

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

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

Существуют программы, распознающие конкретные реализации CAPTCHA, к примеру, PWNtcha. Кроме того, существует возможность подключать модули программ распознавания текста (например, FineReader) в программы для распознавания «картинок» CAPTCHA.

CAPTCHA различают по степени защиты: «сильная» CAPTCHA и «слабая» CAPTCHA. В числе «слабостей» — четкий фиксированный шрифт, фиксированное положение символов, отсутствие искажений, отделение символов от фона с использованием цветового ключа или размытия по Гауссу, легкое отделение символов друг от друга и т. д.

Иногда бывает, что «сильная» CAPTCHA оказывается труднораспознаваемой и для человека. Иногда встречается CAPTCHA, легко прочитываемая компьютером и нечитаемая человеком (например, CAPTCHA с сильно размытой или неконтрастной картинкой).

Одним из методов обхода CAPTCHA является сервис Captcha Exchange Server (запущен в марте 2007 г.). Этот сервис направлен на «обход» картинок CAPTCHA, используемых файлообменными серверами. Принцип работы сервиса основан на системе баллов, которые пользователь может заработать, распознавая — в свободное время — картинки для других пользователей. Набранные баллы пользователь может потратить позже, запустив программу автоматического скачивания файлов с файлообменного сервера (при этом текущие «картинки» будут распознаны другими пользователями сервиса). Таким образом, пользователь может оптимизировать затраты своего времени (и денег), тратя набранные баллы в удобное время.

Несмотря на уязвимости, CAPTCHA-защита очень популярна в Интернете.

Ну, а если мы проходим CAPTCHA, значит, мы не роботы!.. Теги: компьютеры, робот, Интернет, защита

shkolazhizni.ru

Google придумал невидимую капчу, которая не раздражает

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

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) — это технология, которая позволяет отличить бота от настоящего пользователя. Их использование позволяет уменьшить поток спама и защитить страницы. Наиболее популярны графические капчи — те. в которых пользователю предлагается разобрать текст, который якобы не может прочитать машина, или определить, что изображено на картинке.

Однако в последние годы технологии распознавания изображений продвинулись так далеко, что иногда компьютер улавливает зашифрованные смыслы лучше человеческого глаза: пользуясь этим, компьютерам доверяют, например, чтение едва заметных писмён на археологических находках или старых картинах. И с распознаванием изображений у машин всё обстоит довольно неплохо: учёные, правда, до сих пор просят граждан помочь в анализе больших массивов изображений, как в проекте Backyard Science, но с более простыми задачами программы справляются самостоятельно — Google и другие поисковики давно умеют искать по картинкам, недавно был запущен Shazam для картин, ИИ неплохо разгадывает даже очень плохие рисунки пользователей.

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

Добавить новую reCAPTCHA на свой сайт можно здесь.

Новая капча отображается только в виде окошка, в котором программа сама ставит галочку и сообщает вам о том, что вы не робот. Спасибо, Google.

www.popmech.ru

Полная хиромантия

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

Новая надежда

Капча (CAPTCHA — Completely Automated Public Turing test to tell Computers and Humans Apart) — это автоматизированный публичный тест Тьюринга, направленный на выявление компьютеров среди посетителей сайтов. Этот механизм защиты должен оградить сайты от спама, автоматических регистраций, накруток и прочих нелицеприятных дел, которыми обычно занимаются боты.

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

Пользователю нужно выполнить простейшее действие — отметить галочкой утверждение «Я не робот». В этот момент специальный скрипт оценивает косвенные параметры, указывающие на возможного бота: информация о времени, проведенном на странице, IP-адрес и прочее. Если же у No CAPTCHA закрадываются сомнения в том, что пользователь — человек, то она предложит выполнить простое задание, вроде поиска определенного объекта на картинках или ввода стандартной капчи.

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

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

Рождение легенды

Оригинальная версия капчи была разработана в 2000 году специалистами американского университета Карнеги — Меллон. Команда под руководством Луиса Фон Ана (Luis von Ahn) поставила перед собой цель создать защиту, устойчивую к распознанию и угадыванию. Это значит, что капча должна быть нерешаемой для систем распознавания текстов и прочих алгоритмов, а также ее нельзя угадать за малое число попыток (менее 1000). Но для человека она не представляет никакой трудности.

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

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

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

Когда с помощью reCAPTCHA были расшифрованы архивные номера газеты The New York Times, на авторов этой системы обратили внимание в Google. В итоге «корпорация добра» купила сервис (в 2009 году) и взялась за расшифровку старых книг, а потом и за распознавание фрагментов снимков из Google Street View. Благодаря сервису в день оцифровывалось примерно 100 миллионов слов, что давало более двух миллионов книг в год.

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

Бесполезная защита

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

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

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

lenta.ru


Смотрите также

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>