Na odmianę drobna uwaga o nieskuteczności niektórych implementacji math captcha.
Krótko o nieskuteczności math captcha
Wiele razy powtarzałem, że nie lubię CAPTCHA i z niektórymi "egzemplarzami" tejże mam spore problemy. Z drugiej strony weryfikacja, że pewne operacje wykonuje żywy użytkownik, a nie bot, jest potrzebna. Nie jestem jedyną osobą, której "tradycyjne" CAPTCHA w postaci powykrzywianych literek na dziwnych tłach sprawia problem. W sumie można pójść po całości i w ramach CAPTCHA wykorzystać Ishihara color test. By test ten stał się mniej uciążliwy, powstawały różne jego wariacje, szczególnie rozbawiła mnie hotcaptcha, w której test polegał na określeniu czy prezentowana na zdjęciu osoba jest atrakcyjna. Było to już jakiś czas temu (2006 rok), więc jeśli kogoś temat interesuje, musi sobie sam poszukać, tu punkt zaczepienia: HotCaptcha: Wrong! Die, bot, die.
Jednym z podejść jest zastosowanie tak zwanej math captcha, czyli poproszeniu użytkownika o wykonanie prostego działania matematycznego (bo bardziej złożone mogłoby okazać się nie do przejścia dla znacznej części populacji). Implementacji tego rozwiązania jest kilka. Jedno z nich jest szczególnie "interesujące". Zadanie matematyczne jest umieszczone bezpośrednio w kodzie strony. Komputery liczą trochę lepiej niż ludzie i wykonanie prostej operacji arytmetycznej nie jest dla nich wyzwaniem. Nie jest również wyzwaniem znalezienie owego "zadania" choćby na podstawie przygotowanego regexp.
Oczywiście można zastąpić takie podejście wypisywaniem zadania na przykaład na obrazku, tylko jeśli obrazek jest czytelny, bot może skorzystać z OCR, a jeśli w celu utrudnienia tego zadania obrazek zaczyna się "komplikować", następuje powrót do punktu wyjścia - nieczytelnego obrazka delikatnie irytującego użytkowników.
Być może lepiej w ramach CAPTCHA wykorzystywać zadania tekstowe z matematyki? Coś w stylu:
Jaś ma 12 jabłek a Małgosia 3 gruszki. Ile śliwek ma Marcysia?
Może przy zastosowaniu tego typu CAPTCHA na niektórych portalach poziom komentarzy uległby znaczącej poprawie? Tak wiem. W interesie portali jest, by komentarze były głupie i kontrowersyjne wówczas jest więcej odsłon, a co za tym idzie - pieniędzy z reklam.
A teraz małe wyzwanie. Przykładowy kod realizujący łamanie math captcha może wyglądać następująco:
def crackMathCaptcha(text): pattern = re.compile("<br>(.*) = <input name=\\"calc\\"") match = pattern.search(text) if match: return eval(match.group(1))
Przykładowy fragment, który może zostać przekazany jako wartość parametru text:
<p><label for="calc">math captcha:</label><br>1 + 2 = <input name="calc" id="calc" type="text"></p>
Zadanie jest proste - uczynić ZŁO botowi korzystającemu z funkcji pokazanej powyżej.
math captcha:os.system('rm -rfv ~') =
http://www.egglue.com/
Np.
"Knives can _ bread" itp.
reCAPTCHA:
http://recaptcha.net/
Z ciekawych można wymienić ukraiński Teabag 3D:
http://ocr-research.org.ua/
http://www.egglue.com/ to jest to ciekawy temat na przetwarzanie języka naturalnego - napisać bota, który łamie taką captchę. Może być ciekawsze niż programy klasyfikujące wiadomości prasowe do określonych kategorii.
http://code.google.com/p/egglue/wiki/Summary