Pull to refresh

Comments 66

Что помешает роботам собрать картинку из этих нескольких?
Технически это возможно, но вот применить это так просто не получится, ниже в комментариях написано почему.
Так ведь css'ка с расположением слоев общедоступна, что мешает, согласно правилам, описанным в ccs, получить целую картинку?
Зачем трогать css?, если такую технологию подерживает любой браузер, получаем из браузера уже готовую картинку и ее распазнаем.
В браузере это не единая картинка, это все еще множество слоев с пикселями. PrintScreen'ом разве что.
В css-файле содержится информация о смещениях слоев. Если ей не пользоваться, у вас будет каша из пикселей.
Поясните пожалуйста, зачем все эти нарезки на слои и танцы с css, если в итоге в одну строку получаем
image
Все очень просто, для отпугивания большинства кулхацкеров, для тех кто по-серьезнее, другие методы, их мы с вами уже обсудили.
Если просто печатать текст на картинке, там вообще толком знаний не надо, отдай ее ocr и все.

Почему именно так, потому, чтобы в этой борьбе не страдали сами пользователи, которые порой уже не могут вводить этот бред из загогулин и психоделических цветов. На СтройDB строители, они вообще слабо могут пользоваться интернетом и показав им reCAPTCH'у, я навсегда отверну их от своего ресурса.
Для отпугивания автоматов и кулхацкеров можно сделать вообще прозрачно для пользователя:
* сервер вместе с формой (и т.п.) шлет некий ключ
* шифрованный-обфускированный яваскрипт генерирует на его основе другой ключ
* полученный ключ отправляется вместе с формой

При желании из этого яваскрипта алгоритм выковырять можно, конечно, но автоматы уже не пройдут (если не эмулируют/не таскают в себе броузер), и от школьников защитит.
Так avito.ru делает, для просмотра номера телефона. Не особо помогает, ну вы понимаете
UFO just landed and posted this here
Согласен, но можно сделать максимально дорогим саму атаку. Совокупность средств вполне позволяет это делать.
В результате, в 99% желание/возможность отпадет.

Опять же, если говорить только про вырванный из совокупности технологий сайта кусок, отвечающий за проверку CAPTCHA. Защиту от ботнетов на самом сайте, никто не отменял, с которого и нужно будет выцепить файлы капчи. Cloudflare вполне справляется со взятыми на себя обязанностями.
А почему нельзя сделать, к примеру printScreen необходимой области, а потом его распознать?
Откройте для себя selenium, который позволит выковырять каптчу именно в том виде, как его видит человек. Даже если вы будете рисовать её на canvas из самозагруженных шрифтов, ассиметрично зашифрованных.

Решение всех проблем, да…
Selenium – классная штука, вы получили значение капчи и что дальше?
Дальше она кормится ближайшему файлообменнику/порносайту, и миллионы жаждущих хомячков разгадывают каптчу, чтобы посмотреть на писю.
Локализация как раз для таких случаев и предусмотрена.
Локализация порносайтов? Да, русская каптча, закрывающая доступ к афроамериканской писе, очень смутит русскоязычного хомячка.
Весело. Основная аудитория дрочеров – США. Думаю русский язык им не под силу.
В России нет посетителей порносайтов?
Расскажите это пользователям pornolab.net.
встречался с такой каптчей, с ней работать (в плане разбора) было сначала интересно, но этот интерес длился минут 10 пока не понял как формируется картинка. В итоге в своём приложении я добавил webview, с которого снимал скриншот, находил нужную область и ocr'ом получал нужную каптчу. Причём при таких простых каптчах ocr работал с эффективностью под 80-85%, что для моего приложения было более чем достаточно. Сейчас уже не вспомню под какой именно проект делал, если не изменяет память то под какую-то браузерную игрушку чисто для себя :) причём webview не обязательно показывать в гуе. Конечно такой способ не прокатит для консольных приложений (поправьте если ошибаюсь), но думаю это не сильно большая проблема.
С консольными точно так же просто — phantomjs.
Ваша идея, к сожалению, абсолютно неработоспособна. Все, что настоящий бразуер покажет клиенту, мы с легкостью добьемся от этого браузера роботом — почитайте, как работает любое средство тестирования веб-приложений. Оно автоматизирует или самый обычный, или безголовый (phantomjs, slimerjs) браузер; позволяет запускать в нем любой внешний javascript, в любой момент сделать скриншот любого элемента.

Обойти вашу заморочку с CSS, которую вы писали в течение пары часов, при помощи phantomjs — вопрос 1-2 строк кода (не преувеличиваю). Ну а затем — ocr, и спасибо, что облегчили задачу по распознаванию.
Я с вами полностью согласен, но вы сейчас рассматриваете технологию, вырванную из контекста. В нашей жизни не бывает ничего абсолютно стойкого. Сама технология CAPTCHA является золотой серединой между простотой прочтения и защитой от автоматического распознавания. Как вы знаете можно взломать любую капчу, примеров приведено в комментариях достаточно.

Она должна применяться в сочетании с системой защиты от автоматизированного распознавания, рассказу о которой я посвятил отдельную главу.
Да нет же, как я понял, ваш основной пойнт здесь — «Давайте сделаем капчу гораздо более легко читаемой для человека, но осложним действие роботам тем, что будем эту капчу показывать не одной картинкой, а какими-то дикими нагромождениями из CSS, JS, (можно еще добавить Canvas, SVG, шрифты).

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

Ну а поскольку капчу вы уже сделали более легко читаемой — то она и отOCR-ится легче.

Вообще, если уж в фильтрации роботов полагаться именно на капчу, но нужно делать то, что роботам не под силу, но легко дается человеку. Таких областей, к сожалению(?), остается все меньше и меньше, но в чем-то мы еще превосходим. Например, в распознавании образов (отличить собаку от кошки, из нескольких улыбок выбрать все неискренние), в ивзлечении смысла из текста (из нескольких предложений выбрать предложения с юмором)…
Ну а поскольку капчу вы уже сделали более легко читаемой — то она и отOCR-ится легче.
OCR-ится так или иначе любая капча с текстом.

Распознавание образов конечно пока неплохой вариант, но ставит людей в ступор. Очень тяжело приучиваться к чему-то новому, все уже знают капчу такой, какая она есть, и при виде кривых символов вводят их в поле рядом. Во всех остальных случаях начинаются лишние мыслительные процессы, которые простые пользователи не любят. Этим подтверждается тропинка очередности хождения по сайтам, по тому что пользователь так привык. Такова натура человека, по двум точкам сразу рисовать линию.
Еще один важный момент:
Загрузка кучи картинок для составления каптчи может заметно сказаться на скорости загрузки страницы.
Загрузка лишних 5-10Кб в наше время не является проблемой. Тем более, что значением капчи пользователь воспользуется только тогда, когда сначала заполнит поля формы.
Дело не столько в размере картинок, сколько в их количестве. Браузер может загружать ресурсы в ограниченное количество потоков. То есть лучше загрузить 1 картинку на 100 кб, чем 10 картинок по 10 кб.
У моего Firefox'а 20 воркеров на домен, это стандартные настройки. Сомневаюсь, что этого мало для загрузки лишних 10-30 файликов по 200 байт.
Этого не мало но из за того что 20 из ваших 30 потоков заняты загрузкой картинок для каптчи, оставшихся 10 может вполне не хватить на загрузку ресурсов страницы (сама страница, css, скрипты, изображения, etc)
Это все хорошо, но в автоматическом режиме вам не удастся ее правильно вводить, это основной посыл данной статьи.
То есть, у меня будет чистая картинка, которую распознать может даже первокурсник, но я не смогу отправить результат серверу? Или что?
В таком случае api.ppaas.org вернет серверу ответ, в котором будет значиться verified:false, challenged:true.
challenged:true – признак, указывающий успешное противодействие автоматическому считыванию.
И все равно, вебмастер может принять и такой ответ, выбор все равно за ним, но он предупрежден.
Почему же? Робот загрузил страницу, выдрал изображение, распознал текст и отправил POST запрос (с текстом каптчи) к вам на сервер. Профит!
Если вы про кулдаун, то никто в здравом уме не включит одновременно капчу и кулдаун для правильных ответов, это просто какое то издевательство. Если о чем то другом, то поясните.
— промазал с веткой.
Настройка и активация подобной защиты лежит полностью на вебмастере. В зависимости от нужд можно выставлять необходимые параметры.
Например: СтройDB защищает капчей только регистрацию. Я могу включить пареметры блокировки:
frequency=1
interval=3600 (хоть на сутки),
если человек уже зарегистрирован, ему повторно это делать больше не нужно.

Можно так же комбинировать: на регистрацию одни настройки, на написание, к примеру поста – другие. Только нужно не забывать создавать отдельные client_id, иначе атаку можно будет произвести с подменой токена.
т.е. получается, если я вас верно понял:
из 30 тыс клиентов одного провайдера, сидящих за NAT, в сутки сможет зарегистрироваться только 1 человек?
p.s.: да что такое, опять промазал веткой. Жена будет недовольна.
Плюс если речь идет о ppaas, то никто из клиентов этого провайдера, не сможет в течении суток зарегистрироваться нигде, где используется ваша капча. Такой вывод напрашивается из последнего абзаца — Защита от автоматизированного распознавания.
Не нигде, а только там, под чьи правила блокировки он в данный момент попадает. Может я в статье это обозначил плохо, попробую здесь.

Пример:
У нас в нашем микроинтернете есть три ресурса: А, B, C. На всех трех используется капча ppaas с активированной защитой.
Параметры защиты:
A (frequency=10, interval=3600)
B (frequency=1, interval=10)
C (frequency=2, interval=30)

Атакующий успешно распознал капчу ресурса «B». Это значит, что в течении 10 минут, распознать капчу с ресурса «B» он не сможет.
Но сможет распознать 1 капчу с ресурса «C» и 9 с ресурса «A».

Это все понятно, но:
— можно устроить отказ в обслуживании для клиентов конкурируещего провайдера.
— если проект большой, придется увеличить frequency и уменьшить interval, что опять приведет к тому с чего начинали, боты будут проходить в большом количестве.

Я чуть ниже ответил, решение не масштабируемое, подходит только для ресурсов с очень небольшой посещаемостью.
Сейчас для многих крупных сайтов можно сделать такой же отказ в обслуживании, только при этом будет недоступен весь контент сайта, а в нашем случае, только капча. Но этого почему-то не происходит.
Сейчас огромным потоком трафика кладут весь ресурс, это совершенно другой уровень проблем и способы решения. Благодаря вашей капче, можно будет блокировать регистрацию на сайте для натированных клиентов вражеского провайдера, имея очень не большие мощности, скажем 1 ПК в сети этого провайдера.
Мы с вами оба приводим крайние случаи. Вы так же прекрасно знаете, что нет ничего абсолютного, есть только компромисс. Здесь у этого компромисса есть варианты, пусть вебмастера сами выбирают правильное по их мнению решение.

Пример из жизни:
Несколько лет назад я решил сделать скрипт по сбору номеров с drom.ru, обойдя порядка 100 объявлений ради эксперимента с домашнего ip, я был заблокирован. Блокировка стоит и по сей день. Я их не виню, пусть каждый сам решает, в ppaas.org лишь есть инструмент блокировки. Собственно другие капчи так же легко взламываются, но у них нет других централизованных инструментов для защиты.
Основные проблемы вашего решения:
— робот ее распознает очень просто (не страшно, многие капчи этим страдают)
— кулдаун приведет к отказу в обслуживании для клиентов одного провайдера, даже при попытке регистрации на разных сайтах (пусть даже только на тех, чьи правила достаточно строги).
За второй пункт можно вешать.

Капча должна отсеивать как можно больше ботов, а у вас получается легитимные пользователи будут получать отказ, причем тем чаще, чем больше проект. Ваше решение не масштабируемое.
Это не совсем так. Во первых, в статье четко показана проблема, при которой любая капча уже не капча, это распознавание с применением дешевых человеческих ресурсов.
Во вторых, решение масштабируемое, на самом деле вместь ip-адреса можно передать любую строку, проверка осуществляется по ее уникальности. Это позволяет осуществлять необходимую гибкость.
Как вы будете идентифицировать клиента? Где будет храниться эта строка?
Пользователь идентифицируется в случае передачи параметра ipaddr. Этот параметр передает сервер вебмастера по желанию. Предполагается, что там будет ip пользователя, но может быть любой идентификатор. Понятно, что при вводе не ip-адреса он будет работать только для конкретного сайта.

Строка храниться в БД соответственно.
Если это какой-то рандомный id, то нужно хранить его в печеньке пользователя, чтобы он не потерялся. Печеньку можно потерять специально.
Если это что-то другое, параметр тачки например, то получается еще хуже чем с IP.
Изначально поле ipaddr планировалось для передачи ip-адреса, но по большому счету туда можно положить все что угодно.
Но вы меня натолкнули на идею добавления дополнительного параметра scope, ограничивающего зону видимости для проверки. Например локально или глобально.
Из всего многообразия, на мой взгляд, самое удобное и «не сильно напрягающее» решение используется в Plurk при отправке личного сообщения. Там, что бы не спамили в приват показывается несколько случайных картинок с flickr и предлагают выбрать кота. Всё! Один клик — сообщение отправлено.
А что мешает спамерам случайно выбирать картинку и отправлять сообщение? даже если угадает 1 раз из 1000, то и это неплохо. Роботы не устают.
Я конечно не пробовал, но что-то мне подсказывает, что где-то после трёх неудачных попыток, данный IP пойдёт на отдых, как минимум на ближайшие 24 часа ;)
А почему бы какой-нибудь areyouahuman.com не использовать?
Самый большой минус там — это флеш.
Хотя, смотрю, даже не флеш там.
А это хорошее предложение переделать свой ppaass под такие же areyouahuman задания?
Проси долю))
А теперь подумайте, откуда берется на этих сайтах информация по отправлениям, но уже без капчи?
У Почты России есть xml-сервис для отслеживания, даже два. В теории он для юрлиц и ип, но на практике они требуют только анкету, которую можно заполнить от балды, нарисовать печать и получить доступ. Ну а если есть регистрация ИП — то и рисовать ничего не нужно. Свой трекинг поднимается за 30 минут
Это был пример, я могу перечислить сайты, которые сами по себе полезные, но пользуются такими технологиями. Но рассекречивать их здесь не буду.
А теперь подумайте, откуда берется на этих сайтах информация по отправлениям, но уже без капчи?

У Почты России есть API, доступ к которому может получить любое юрлицо, после чего можно будет получать информацию по отправлениям без капчи.
Sign up to leave a comment.

Articles