P-Programowanie

Skrypt CAPTCHA

Ostatania modyfikacja: 28 września 2017, kategoria: Php

CAPTCHA to technika stosowana w skryptach, umożliwiająca wprowadzanie danych do formularzy tylko przez ludzi, odrzucając roboty sieciowe. Używanie CAPTCHY (potocznie kapeć) w dzisiejszych czasach jest koniecznością. Wszelkiego rodzaju skrypty i programy spamujące stały się plagą i nieodłączoną częścią internetu. Każdy niezabezpieczona strona widniejąca w wyszukiwarce google zostanie wcześniej czy później zasypana komentarzami oraz postami.

Czym jest skrypt CAPTCHA

CAPTCHA spotykana jest w wielu formularzach wymagających podawania danych przez użytkowników. Wyświetlana jest w postaci obrazka lub działania matematycznego, treść obrazka lub wynik działania należy przepisać w odpowiednie pole. Dzięki temu robot sieciowy nie może zarejestrować nowego konta lub dodać setek komentarzy w ciągu paru sekund.

Skrypty CAPTCHA są stale rozwijane i udoskonalane. Przyczyną tego są skrypty potrafiące łamać captchę, tzn. potrafiące odczytywać tekst z obrazka lub potrafiące obliczać działania matematyczne wyświetlone na stronie. Zaawansowane skrypty CAPTCHA mają nieczytelne litery, różne kolory, wszelkiego rodzaju kreski i losowe położenie cyfr i liter. Wszystko po to aby utrudnić odczyt CAPTCHY robotom.

CAPTCHA obrazkowa

Jest to najskuteczniejszy rodzaj CAPTCHY spotykany na popularnych serwisach. Wymagane jest stworzenie skryptu PHP generującego losowy obrazek. Obrazek wyświetlamy w formularzu. Oprócz generowania obrazku skrypt musi zapisać treść z obrazka do zmiennej sesyjnej (np. $_SESSION[‚captcha’];).

Kod pliku captcha.php

Możesz zmienić wymiary i kolory generowanego obrazka. Plik captcha.php wyświetlamy teraz w formularzu tak jak każdy inny obrazek. Obok należy umieścić pole tekstowe na wpisanie treści z obrazka. Aby sprawdzić czy wpisany kod CAPTCHA jest poprawny, pobieramy metodą POST wartość wpisaną w polu tekstowym i porównujemy ze zmienną sesyjną o nazwie captcha.

Sprawdzanie poprawności captchy

CAPTCHA tekstowa.

Skuteczność tego rozwiązania jest mniejsza, jednak bardzo dobrze sprawdza się to na małych stronach. Mniejsza skuteczność spowodowana jest łatwością napisania skryptu wykonującego podane przez nas działanie matematyczne. Jednak aby taka sytuacja zaistniała, ktoś musiał by napisać skrypt specjalnie pod naszą stronę, wycinający działanie matematyczne za pomocą wyrażeń regularnych.

Działanie jest identyczne jak w przykładzie graficznym. Zamiast generować obrazek, wystarczy wygenerować kilka cyfr za pomocą funkcji rand. Wynik zapisujemy do zmiennej sesyjnej, a działanie wyświetlamy w formularzu.

Podsumowanie

Z mojego doświadczenia wynika, że wystarczy nawet proste „Wpisz wyraz KOT w polu obok” aby zablokować 99% robotów sieciowych i nie potrzeba do tego żadnej CAPTCHY. Jednak lepiej dmuchać na zimne niż któregoś dnia obudzić się z 10MB spamu w bazie danych.

Użytkownik charli napisał:

13 kwietnia 2013


bardzo fajny skrypcik pozdrawiam

Użytkownik Jon napisał:

15 sierpnia 2013


Dobrze i prosto to przedstawiasz i tak rób dalej.

Użytkownik arek napisał:

22 sierpnia 2013


A jak dopisać te pole tekstowe ?
pozdrawiam

Użytkownik Karol napisał:

22 sierpnia 2013


Jakoś tak:

< form name="captcha" method="post">
< img src="captcha.php" alt="captcha">
< input name="kod" type="text" value="przepis obrazek">
< input name="sbm" type="submit" value=" OK ">
< /form>

Użytkownik sz napisał:

03 kwietnia 2014


dzięki, kod się przydał :-)

Użytkownik Maciek napisał:

23 kwietnia 2014


„Mniejsza skuteczność spowodowana jest łatwością napisania skryptu wykonującego podane przez nas działanie matematyczne. Jednak aby taka sytuacja zaistniała, ktoś musiał by napisać skrypt specjalnie pod naszą stronę, wycinający działanie matematyczne za pomocą wyrażeń regularnych.”

Mógłbyś przybliżyć jak coś takiego zrobić? W czym taki skrypt napisać itd. Oczywiście w celach edukacyjnych ;)

Użytkownik Karol napisał:

23 kwietnia 2014


Program pobierający źródło strony możesz napisać praktycznie w każdym języku, także PHP umożliwia taką funkcję. W PHP osiągniesz efekt używając biblioteki cURL lub funkcji PHP o nazwie „file_get_contents”.

Kiedy masz źródło strony to wydobycie dowolnego ciągu znaków nie sprawia żadnych trudności. Wystarczy proste wyrażenie regularne, które dopasuje odpowiedni wzorzec.

cURL udostępnia także funkcję wysyłania (i wypełniania) formularzy HTML. Także jeżeli masz adres strony, odczytasz captchę, to możesz bez problemu zaspamować komuś komentarze, fikcyjne konta lub różne inne rzeczy wysyłane drogą zapytań POST.

Użytkownik Maciek napisał:

27 kwietnia 2014


Dzięki, o taką odpowiedz mi właśnie chodziło.

Użytkownik es napisał:

03 listopada 2014


witaj,
mam pytanie /ponoć kto pyta nie błądzi../ :
w którym miejscu w pętli ‚losowanie siatki’ /wiersz 28/, wykorzystywana jest zmienna $i ?

pozdrowienia

Użytkownik Karol napisał:

03 listopada 2014


Cześć. Iterator pętli nie jest wykorzystywany jak dobrze zauważyłeś. Operacje wewnątrz pętli należało powtórzyć wiele razy aby uzyskac losowy wygląd obrazka, jednak wykorzystanie zmiennej $i nie jest potrzebne

Użytkownik es napisał:

03 listopada 2014


dzięki za wyjaśnienie,
pozdrowienia

Użytkownik Kazimiera napisał:

10 września 2017


Widzę, że wpis jest z 2014r., ale mam problem i może otrzymam od Ciebie pomoc. Mam problem z Captchą obrazkową przez co nie mogę korzystać z wielu stron, na których mi zależy. Obrazki Captcha pojawiają się, ale po naciśnięciu wybranego obrazka znika on, a nie zostaje odznaczony. Nawet jak dobrze uda mi się za którymś razem zaznaczyć właściwe obrazki i zostaję to potwierdzone zielonym znaczkiem to i tak pojawia się napis: „Incorrect captcha solution – please try again „. Nie wiem co mam robić.

Zachęcam Cię do zostawienia komentarza!

Ilość znaków: 0