Алгебраическая captcha
Наткнулся на просторах интернетов на любопытную реализацию технологии captcha – пользователю предлагается решить линейное уравнение с одним корнем и ввести решение в качестве проверочного кода.
Я, когда себе на блог искал капчу, много разных перепробовал, но с таким любопытным подходом не сталкивался. Решил посмотреть на неё поближе, открыл код страницы и разочаровался – задание для капчи выводится текстом, а не картинкой.
В общем из любопытства решил её поломать
В общем случае данная captcha представляет собой линейное алгебраическое уравнение (ax + b = 0). Для решения воспользовался . (Эх, почему же я не знал о ней на 1-3 курсах института?! Она даже на КПК способна работать!).
Строка с задчей для капчи получается из html-кода страницы примерно в таком виде:
1 | <b>(<i>x</i>+9)∙5+4=64</b> |
.
От тегов
1 | <b> |
можно избавиться на этапе получения нужной строки, но большого вреда от них нет, так что для наглядности оставил.
Дальше строка немного обрабатывается для приведения к виду, пригодному для решения в Maxima, затем следует собственно решение и далее – обработка вывода для вычленений из него нужного проверочного кода (вывод у Maxima достаточно подробный, даже если применить опцию –quiet):
#!/usr/bin/perl use warnings; use strict; use encoding 'utf8'; my $input = '<b>(<i>x</i>+9)∙5+4=64</b>'; $input =~ s|</?[b,i]>||ig; $input =~ s/∙/*/ig; $input =~ s/−/-/ig; print $input,"\n"; my $out = qx/maxima --quiet --batch-string=solve"($input);"/; my $x = $1 if $out =~ m#\[x = (-?\s?\d+)\]#gi; print $x,"\n"; exit 0;
Вот так мне повезло за один вечер познакомиться с интересной идеей для механизма captcha и узнать о прекрасной системе компьютерной алгебры Maxima.
Желаю и вам побольше новых приятных открытий!
Еще на похожие темы:
Рубрики: Linux, Гаджеты, Технократия |
Метки: captcha, linux, maxima, security, алгебра, программинг |
Комментариев нет

ноября 13, 2009 | Автор: dimio 

Последние комментарии