Вопрос № 139201: Здравствуйте ув. эксперты.
Я хочу написать свою капчу. Почему не хочу использовать готовые аналоги:
1) Мне сам процесс программирования доставляет удовольствие… ну пока ещё доставляет))
2) Я пока ещё не профессиональный программист и в це...
Вопрос № 139.201
Здравствуйте ув. эксперты.
Я хочу написать свою капчу. Почему не хочу использовать готовые аналоги:
1) Мне сам процесс программирования доставляет удовольствие… ну пока ещё доставляет))
2) Я пока ещё не профессиональный программист и в целях повышения навыков программирования нужно стараться всё писать самому… аналоги буду использовать потом, когда стану хорошим программистом
3) Не встречал капчи, которая бы подошла по дизайну и цвету к готовому шаблону.
Итак, меня интересует каков обще принцип капчи, и как сделать достаточно устойчивую капчу против ботов.
Мне кажется что правильным будет сделать так:
Нарисовать самом окошечко в котором будет выводится код. В БД в отдельной таблице хранить какой-нибудь ID и второй поле сам код, который нужно будет ввести. При работе скрипта произвольно по ID выбирается этот код, и графическими функциями подставляется в нарисованное окошечко, модифицируется, чтобы роботы не могли считать и выводится на экран. Ну и потом уже проверяется введённое значение с хранящемся в этой временной переменной, произвольно выбранной из БД.
Или же, ещё лучше нет никакой БД, я цифро-буквенный код который выводится на картинке, создаются произвольно из отдельных символов.
Насколько правилен такой подход? Или можно как-то более рационально?
И ещё вопрос по модификации самого текста. Насколько я понял, почитав форумы по это тематике, просто наложение полосок, точек и прочего мусора легко отсеивается ботами, но усложняет восприятие человеком. Самым лучшим является комбинирование этих наложение с волнообразными эффектами. Но ведь «волны» тоже усложняют восприятие?
Неплохую капчу я видел на zaycev.net. Там сами символы рисуются кружочками с немного отличающимся радиусом. Очень хорошо понятно, и к тому же, как мне кажется, довольно тяжело будет подобное проанализировать.
Насколько надёжна будет такое рисование кружочками? Как примерно это можно реализовать? Как вообще вы советуете модифицировать эти символы, при выводе на картинку, чтобы и человеку понятно было, и робот не смог проанализировать?
Отвечает: Викулин Антон Юрьевич aka obla
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
Удачи вам в этом вопросе - у меня знакомый писал курсовик на эту тему, только наоборот, он символы разпознавал, а не скрывал :):) ... Начну со второго вопроса, попробую в двух словах рассказать, как работают боты.. тут есть два варианта...
1. Вышла(анонсирована) новая версия защиты - выводятся картинки, они генерятся, и т.д, и т.п... тут же находятся люди, которые это все реализуют - по особенности конкретной системы, они пишут распознавалку, и успешно ее выкладывают в сеть(продают).Как они действуют - вычисляют, что за шрифт, какие эффекты, и распознают, разделяя буквы, выполняя обратное преобразование(волны - распрямляют, "песок" собирают и т.д.)...
2. Пишут универсальную систему - например, на основе нейросетей. Нейросеть - это экспертная система, которая в состоянии дать ответ на вопрос в зависимости от входящих сигналов. Ее отличительная особенность в том, что ее качество зависит не от того, как ее спрограммировали, а от того, как ее обучали. Т.е. есть, допустим, матрица, в ней точки, которые формируют изображение - эти точки подаются на вход нейросети, причем каждый вход особым образом суммирует ближайшие точки, и расставляет веса, после чего "мешаем-мешаем-мешаем",
и, пройдя через несколько слоев сети на выход выходит код символа.
Эффективность такого подхода достаточно высока. Средней руки нейросеть распознает символы всего лишь в два раза хуже человека. Определить алгоритм сети крайне тяжело, зачастую, она "сама не знает, как дает ответ"...
Несмотря на очевидные различия, с этими подходами борятся одинаково - делают новые релизы, ведь в первом случае надо заново писать распознавалку, во-втором - заново обучать нейросеть...
Отсюда вывод - что бы вы не придумывали - придумайт новое, и тогда к вам НИКТО не сунется... если честно, то в области графики я почему-то ничего не могу предложить(мало видел, да и не силен я в этом)... Могу только напомнить, что есть альтернативные системы, например, выводится текст, надо найти лишнее слово(по смыслу, это машине сложнее), слово где больше гласных(это быстро раскусят, если захотят). Еще вариант - надо прослушать звук, потом ввести то, что услышал. Можно вообще, анимированый гиф сделать, чтобы
никто не расслаблялся...
Теперь к первому вопросу - по поводу технической реализации - с БД или нет, но помните, что никто не должен получать доступ к ответу, и надо быть готовым, что достаточно много пользователей будут одновременно угадывать буквы - т.е. вариант "скрипт генерит картинку-записывает код в файл-скрипт читает код из файла при валидации" - не подходит, т.к. другие пользователи успеют понавводить свои варианты, и не понятно, кому читать. Вариант делать сессии - тоже не то, т.к. авторизация происходит ДО ввода
текста, а авторизировать каждый IP - это не оправдано. Вариант проверять форму во время отправки с помощью Java-script(код передается форме в поле hidden) - вообще смешно(зато сильно удивит потенциального взломщика и полезно для отладки).Последний вариант - использовать cookies(в кукис записываем ID, потом передаем его на сервер), это ОЧЕНЬ спорно(некоторые запрещают cookies), но многие им пользутся, и по-моему, зря. Уфф... теперь тупые варианты кончились.
Если база данных все равно используется на сайте, то рекомендую ID+код, как вы и писали.Вариант с cookies тоже достоин внимания.
--------- Все что когда-либо должно случиться, уже произошло.