Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание капчи 
:(
    Опции темы
Aliance
Дата 18.12.2012, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Встала необходимость в создании умной капчи.

Пока не понятна сама задача, точнее ее критерии, поэтому хочу просто подискутировать. 

Что я знаю и соответственно имею на сегодняшний день:
- highload проект
- капча как для авторизированных пользователей, так и для гостей.
- варианты с recaptcha и "пододвинь кружок внутрь треугольничка" не нравятся.

Пока что хочется давать на вход классу некий токен сессии, на выходе получать капчу, если она нужна. То есть по умолчанию ее не показываем, показываем, если число обращений больше N с одного ИП.

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

Это сообщение отредактировал(а) Aliance - 18.12.2012, 13:26
PM MAIL WWW ICQ Skype   Вверх
MoLeX
Дата 18.12.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 0
Всего: 140



когда-то делал капчу нажмите следующие цифры и табло (как у калькулятора) с перемешанными цифрами. хотя тоже обходится легко.

главное не переусердствуй, иначе гнев получишь от пользователей.

P.S. по мне лучше делать таймаут для подозрительно активных юзеров, типо: превышено число запросов, сайт не доступен


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Arantir
Дата 18.12.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 2
Всего: 55



Какие буквы, наверное, не имеет значения. Главное, чтобы пользователь имел возможность их ввести.

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

Довольно сложный алгоритм придется писать на что-то такое:
user posted image
Нелинейный сдвиг со случайным углом усложнит все еще больше:
user posted image
А лучше текст и фон искажать отдельно, а уже потом закрашивать контрастом. И буквы разного регистра.
Но и такое - не 100% вариант.

А вообще, все, что может прочесть человек, сможет и компьютер, если кто-то научит.

Я бы посоветовал выдавать 2 картинки с совершенно разными агоритмами формирования. При этом на сервере иметь как можно больше возможных способов искажения - констраст, искривление, шумы, регистр, линии. И более того - случайно их совмещать при создании картинок.
Вот этот будет убер-каптча. Потому что в таком случае придется еще учить программу узнавать каким способом создана картинка. А это задача не столь тривиальная. Особенно при смешивании способов искажения. Тут уже что-то вроде нейронных сетей понадобиться. Взлом потребует куда больше ресурсов, чем полученная от него выгода.

Главное не делать первой ошибки: Ко всем картинкам применим один и тот же алгоритм.
В этом случае недоброжелатель сможет один раз написать расшифровщик и активно им пользоваться.

Это сообщение отредактировал(а) Arantir - 18.12.2012, 14:48


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Aliance
Дата 18.12.2012, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Из того, что прочитал сейчас, выделил важные факторы в капче:
- рандомный наклон каждой буквы
- наложение букв друг на друга
- помехи/шум
- рандомное чередование нескольких алгоритмов генерации

По поводу того, что взломать можно все - это ясное дело. Но цена усилий... Насколько я знаю контактовскую капчу до сих пор не сломали.
PM MAIL WWW ICQ Skype   Вверх
Arantir
Дата 18.12.2012, 19:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 2
Всего: 55



Aliance, я пару месяцев назад тоже озадачивался вопросом каптчи. Правда только ради интереса, ведь штука полезная и вполне мне когда-то придется делать ее на каком-то проекте.

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

Шум - это вообще тривиальная помеха. Даже, если шум имеет цвет букв, то самый простой выход - удалить все пиксели, рядом с которыми меньше 1/2/3/4 (в зависимости от интенсивности шума) пикселя того же цвета. Буквы остаются, шум пропадает.

Вот наложение букв друг на друга чуть сложнее, но даже тут нашлись молодцы. Идея тоже очень проста. Брать количество пикселей по вертикальным столбцам. Где их меньше всего - это, вполне вероятно, границы между буквами. Режем картинку по этим минимумам и получаем буквы. Да, буквы есть разные. Но способ позволит расшифровать в худшем для взломщика случае более половины каптч. В лучшем - процентов 90.

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

Практически во всех статьях и мануалах по распознаванию текста (да, полезны не только статьи со словом "каптча") все упирается в один замечательный факт - заведомо известно метод искажения текста.
Делаете выдаваемую картинку непредсказуемой и все, облом взломщику. Писать ИИ для распознавания алгоритма вряд ли кто-то посчитает целесообразным. А пропускать картинку по всем возможным алгоритмам тоже не вариант. Если вы наугад смешиваете 3 из 50 способов, то всего есть 117600 вариантов, по которым взломщику придется пробовать расшифровать каптчу. Вряд ли таким способом получится "заддосить" кого-то расшифровками каптчи, кроме самого себя.

И самое главное! - Запретите показ своей каптчи с чужого домена! Не дай бог кто-то напишет скрипт, который вашу каптчу показывает на каком-то порносайте, а по разгаданным каптчам спамит именно ваш сайт.

Это сообщение отредактировал(а) Arantir - 18.12.2012, 20:01


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Fortop
Дата 19.12.2012, 11:05 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Упускается самое важное.

Капчи распознаются вручную китайцами и индусами задешево.

Поэтому все эти повороты до одного места.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 19.12.2012, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 2
Всего: 55



Fortop, ну тут тоже можно кое-чего провернуть. Запретить, там, выдавать каптчу без реферера, содержащего свой домен, например.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Fortop
Дата 19.12.2012, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(Arantir @  19.12.2012,  11:27 Найти цитируемый пост)
Fortop, ну тут тоже можно кое-чего провернуть. Запретить, там, выдавать каптчу без реферера, содержащего свой домен, например. 

Есть разные социальные сервисы, типа той же мамбы, баду и прочих.
Вот они ботов капчей так и не победили.
Догадайся почему? smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 19.12.2012, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 2
Всего: 55



Потому что, если картинка показывается пользователю, то ее можно показать где угодно. 

И это ни для кого соображающего не секрет, что абсолютной защиты нет, есть только соотношение затрат к выгоде взлома.

То, что что-то можно обойти, еще не значит, что надо опускать руки.
Зачем писать каптчу, которую можно взломать программой на уровне лабораторной работы университета? Лучше написать такую, для которой программу будет писать слишком долго/требуется очень много знаний/купить слишком дорого.
Зачем не делать проверки на реферера и т.п.? Выложить картинку на другой сайт сможет любой школьник. А с проверками уже придется подделывать запрос. Для этого не надо быть уровня хакера, но большинство дилетантов уже отсеяны.
Зачем просто показывать картнку? Давайте показывать ее через JS, добавим еще подпись в запрос, все это запакуем в одну сроку и однодлинные переменные (простая оптимизация JS) и еще некая куча взломщиков отсеяна.

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


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
ksnk
Дата 19.12.2012, 22:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Цитата(Fortop @  19.12.2012,  11:05 Найти цитируемый пост)
Капчи распознаются вручную китайцами и индусами задешево.

Вот видишь, дело в цене вопроса!  smile 

Идем на google с вопросом `распознать капчу` и получаем 
Цитата

Неохота, однако, и платить по WMZ за 1000 капч на всяких антигейтах, а больше я ничего, увы, и не знаю.

Итого - 1000 постов за 1 wmz (~30руб)- это цена капчи распознаваемой китайцами.

Стоит ли 1000 спам запросов за wmz на сайт , той капчи, что поставлена?  окупится ли она?

Это сообщение отредактировал(а) ksnk - 19.12.2012, 22:51


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Arantir
Дата 19.12.2012, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 2
Всего: 55



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

Спам запросами можно и бесплатно осуществить =) От того, что кто-то откроет твой сайт, не спасешься.
А от лишних регистраций можно отчасти обезопасится через проверку по e-mail. Просто надо запретить все домены, которые не проходят SPF-проверку с позитивным подтверждением. Брать сервер, отдельный домен и все это настраивать для собственного корреткного почтового сервера обойдется все же подороже, чем расшифровка каптчи китайцами.
А сами по себе частые запросы регистрации - это уже просто ддос или флуд запросами. С ним другие методы борьбы.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Fortop
Дата 20.12.2012, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 1
Всего: 42



Цитата(Arantir @  19.12.2012,  21:30 Найти цитируемый пост)
Потому что, если картинка показывается пользователю, то ее можно показать где угодно. 

Отнюдь smile

Просто потому, что капча это минус к юзабилити. И чем она сложнее и чем чаще ее нужно вводить, тем жирнее минус.

Одно время на гмейле были капчи которые и я-то распознавал один раз из четырех smile
Ровно по этой причине он так и не стал моим основным ящиком.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 20.12.2012, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 2
Всего: 55



И что? Не ставить каптчу вообще? Чтобы для создания скрипта автореги вообще 5 минут понадобилось?

Каптча надо только лишь для того, чтобы 5-строчным скриптом, извините, не срали на сайте. Метод леммингов - штука не новая. И создавать какую-то супер 3D-анимированную каптчу я не предлагаю.
Чтобы кто-то вместо 5 минут не написал парсер каптчи за полчаса, то достаточно выдавать каптчу рандомными алгоритмами. Самую простую, легко читаемую, но всегда по разному исковерканную. Уже тогда ломать ее не будет смыла, так как писать парсер для рандомной каптчи запарнее, чем китайцам (кстати, этим больше занимаются индусы) дать доллар.

И, кстати, вариант из первого поста
Цитата(Aliance @  18.12.2012,  12:26 Найти цитируемый пост)
пододвинь кружок внутрь треугольничка

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

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


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
s0lman
Дата 20.12.2012, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: нет
Всего: 29



Цитата(Fortop @  19.12.2012,  23:32 Найти цитируемый пост)
Одно время на гмейле были капчи которые и я-то распознавал один раз из четырех 


Не хочется разводит флейм, но более адской капчи, чем "угадать количество котов" на Рапидшаре я не встречал...


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Wowa
Дата 11.2.2013, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Ребята, кто-нибудь осилит написать статью по этой теме для нового движка винграда? В нем статьям большое внимание уделяться будет.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.