01.03.2017 o 9:20

[PHP] Jak dodać reCAPTCHA do własnego kodu PHP?

Może na początek zanim napiszę jak dodać reCAPTCHA do swojego kodu PHP, to napiszę do czego służy reCAPTCHA?

A więc reCAPTCHA służy do zabezpieczenia strony przed wypełnieniem przez boty formularza i przed wysłaniem formularza. Pierwsza wersja reCAPTCHA-y działała na zasadzie przepisywania znaków z obrazka do pola tekstowego. Znaki były rozmieszczone na zdjęciu losowo w różnych pozycjach i czasem  zamazane i nie wyraźne.

Niestety, ale programiści zaprogramowali boty, które potrafią odróżnić "przeczytać" znaki z obrazka i wypełnić pole. Dlatego powstała druga wersja reCAPTCHA.

Jak działa druga wersja?
Druga wersja działa następująco. Klikamy w przycisk z tekstem "Nie jestem robotem" i wyskoczy nam okienko z obrazkami. Poniżej obrazka lub powyżej będzie pisać jakie elementy mamy zaznaczyć.

Na przykład
"Zaznacz obrazki na których widać znaki drogowe"
"Zaznacz obrazki na których widać witryny sklepowe"
"Zaznacz obrazki na których widać drzewa"


No dobrze, jak już wiemy do czego służy reCAPTCHA, to terach nachodzi pytanie w jaki sposób użyć reCAPTCHA i w jakim języku kodowania najlepiej?

Jak już wiadomo po tytule strony, moim zdaniem najlepiej możemy zabezpieczyć się używając do tego języka PHP. Powodem wybrania tego języka jest fakt, że jest on wykonywany po stronie serwera, a nie po stronie użytkownika jak w przypadku JavaScript. No i JavaScript można wyłączyć, a PHP nie wyłączymy, bo jest ono wykonywane po stronie poprzez tzw. serwer Apache.

No dobrze, więc skąd pobrać i jak użyć reCAPTCHA w PHP?
Przed użyciem reCAPTCHA trzeba wygenerować klucze bezpieczeństwa. Jest to projekt autorstwa Google, więc trzeba wejść na ich stronę. Żeby nie szukać podaję linka: https://www.google.com/recaptcha/

Po wejściu na stronę klikamy Sign up, przerzuci nas do okna logowania. Po zalogowaniu na konto Google, klikamy przycisk Get reCAPTCHA i zobaczymy następujący formularz:



Wystarczy wypełnić pierwsze dwa pola. W polu Label wpisujemy dowolny opis, a w polu Domains wpisujemy adres domeny lub kilku domen. Po wypełnieniu pól klikamy Register i zostanie nam wygenerowany klucz Site key oraz Secret key.

Pod kluczami widać fragmenty kodów JavaScript i HTML.



Kopiujemy linijkę kodu JavaScript i wklejamy w <head> naszej strony.
<script src='https://www.google.com/recaptcha/api.js'></script>
Kolejnym krokiem jest przejście do naszego formularza kontaktowego i dodanie reCAPTCHA. W miejscu gdzie chcemy wyświetlić wklejamy następujący fragment.
<div class="g-recaptcha" data-sitekey="6LfRO*************oyH3b"></div>
W atrybucie data-sitekey wpisujemy nasz wygenerowany Site key. No i teraz po wejściu na stronę powinieneś ujrzeć reCAPTCHA.

W obecnym stanie formularz zostanie wysłany nawet jeśli ktoś zignoruje naszą reCAPTCHA-e. Dlatego musimy w kodzie PHP naszego formularza dodać jeden warunek, który będzie sprawdzał poprawność wypełnienia reCAPTCHA-y.

Poniżej przykład takiego kodu:
if (isset($_POST['submit'])) {
    $secret = '6LfRORcU***********************1Ei0FdA';
    $response = $_POST['g-recaptcha-response'];
    $remoteip = $_SERVER['REMOTE_ADDR'];
   
    $url = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip");
    $result = json_decode($url, TRUE);
    if ($result['success'] == 1) {
      echo 'Nie jesteś botem';
    }else{
      echo 'Błędnie wypełnione pole reCAPTCHA';
    }
}
W stringu $secret wpisujemy nasz wygenerowany Secret key. Jak widać na powyższym kodzie skrypt wysyła Secret key, treść wypełnionego pola reCAPTCHA oraz adres IP osoby odwiedzającej jako parametry pod wskazany adres i pobiera zwrotną wiadomość, jak widać w stringu $url. I w momencie gdy zwrotna zawartość wynosi 1, to oznacza, że pole zostało prawidłowo wypełnione.

Na powyższym przykładzie wyświetli nam informację, że "Nie jesteś botem". A jeśli pole zostało, źle wypełnione, to wyświetli nam "Błędnie wypełnione pole reCAPTCHA". Oczywiście zamiast tych komunikatów możemy podać własne, ważne by przed wysłaniem formularza sprawdziło czy $result['success'] jest równe 1. a jeśli nie, aby wyświetliło o tym komunikat.

Przykład działania reCAPTCHA można zobaczyć na tej stronie, na podstronie Kontakt.

Jeśli macie jakieś problemy lub pytania dajcie znać w komentarzach.
Pozdrawiam
Drag


Komentarze
© 2010 - 2017 - Karol Drąg
Wszelkie prawa zastrzeżone
Polityka plików cookies