25 listopada 2007
Od dawna rozmyślałem nad skutecznym mechanizmem CAPTCHA, który nie będzie ciężki dla Internauty i nie będzie sprawiał problemów niepełnosprawnym.
Jedna klasa na różne CAPTCHA
Pomysłów miałem kilka, które ogólnie sprowadzały się do chęci napisania klasy PHP pozwalającej tworzyć tak obrazki, jak dźwięki i zagadki matematyczne (lub dokańczanie popularnych tekstów). Pracy wiele, ale taka klasa powinna pokryć wszystkie wymagania i mieć alternatywę na każdą bolączkę. Czasu jednak na to nie znalazłem, a i wydawało się, że mimo wszystko będzie to znaczne zamotanie procesu, który dla użytkownika powinien być kwestią sekundy.
Przebłysk intelektu
Znalazłem jednak wyjście prowizoryczne, które, jak to bywa - okazało się najskuteczniejsze. Dodałem do formularza dodatkowe pole, w które użytkownik... nie ma nic wpisywać.

Boty mają bowiem to do siebie, że próbują w każdy input coś wpisać - inaczej większość formularzy zostanie odrzucona. Oto jednak jedno z pól musi pozostać puste. Koncepcja prosta, ale skuteczna: z tego formularza jeszcze nigdy nie dostałem spamu!
Podchwycić pomysł...
Sprytni autorzy botów szybko wyłapią słowa kluczowe "empty", "puste" przed polem i dostosują swoje skrypty, by nie wypełniały go. Rozwiązań jest kilka: można te polecenia zawrzeć w obrazku, uniemożliwiając (lub utrudniając) detekcję przez boty. Można też użyć JavaScriptu do chowania pól, albo lepiej: tworzyć pola typu hidden z losową zawartością, a następnie przy pomocy JS usuwać ich zawartość przy wysyłaniu formularza (dodać trigger onSubmit). Jeśli dobrze przemyśleć sprawę, można skutecznie wyłożyć prawie każdego bota, wprowadzając CAPTCHA, które nie będzie wymagało od użytkownika żadnych akcji
Chcesz być powiadamiany o nowych artykułach? Zapisz się do kanału RSS
lub zasubskrybuj powiadomienia e-mailem!







25 listopada 2007 o 00:16:09
Czytałem gdzieś, że najlepiej jest zrobić dodatkowy formularz przed, by właściwy znajdujący się po nim nie był wysyłany.
25 listopada 2007 o 00:17:55
Pisałem kiedyś o podobnym rozwiązaniu dla wordpressa:
http://www.tomwys.info/2007/02/04/spam-blogowy-pokonany/
25 listopada 2007 o 01:26:45
http://recaptcha.net/
25 listopada 2007 o 01:34:53
Gorzej jak ktoś napisze specjalnie dla tej strony bota, nie będzie to trudne a kasowania byłoby sporo.
25 listopada 2007 o 02:00:56
@Unit03: O to mi właśnie chodziło, uzupełnie wpis. Niemniej, to wciąż spore obciążenie dla użytkownika i przekazywanie na niego naszej roboty. Lepiej myśleć nad rozwiązaniami user-friendly.
@skkf: Jeśli ktoś pisze bota specjalnie pod nasz serwis, to pojedynek jest już z jedną osobą - wtedy to zupełnie co innego. Na popularne boty powinna jednak taka technika wystarczyć.
25 listopada 2007 o 02:32:04
Jeśli miałbym pisać spambota, zobaczyłbym najpierw daną stronę, a wtedy z pewnością bym widział "nie wypełniaj tego pola". Skuteczność przez niepopularność, przez nie bycie wartościowym na tyle, by ktoś się zainteresował napisaniem czegoś specjalnie na Twój serwis.
25 listopada 2007 o 03:13:52
Zazwyczaj spamerzy nie tworzą czegoś na jedną stricte stronę, chyba, że to youtube, wordpress, phpBB itp...
Jak ktoś tworzy ogromną stronę, musi się pogłowić nad filtrem antyspamowym. Natomiast dla witryn firmowych ten system powinien zdawać egzamin - zwykły bot szukający i submitujący formularze (a takich z moich obserwacji jest najwięcej) się wyłoży.
25 listopada 2007 o 13:34:55
A po co chować pola z pomocą hidden?
Po co userowi zawracać głowę niewpisywaniem czegoś, skoro można po prostu ukryć to CSS`em?
Jak z każdym antyspamem - będzi dobry i skuteczny, póki nie stanie się popularny...
W innym wypadku ktoś się zaintersuje takim zabezpieczeniem, a wtedy wiadomo - nie ma rzeczy nie do złamania ;)