IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Nová reCaptcha - Jak ji použít?

V předchozí lekci, Konfigurační soubor .htaccess II. část, jsme si ukázali další funkce, které můžeme vytvořit pomocí konfiguračního souboru .htaccess.

Otravní roboti nebo nečitelný text. Až doteď problém většiny webmasterů, kteří používali (nebo nepoužívali) captchu, konkrétně reCaptchu od Googlu. Ten ale vypustil novou verzi se sloganem "Tough on bots, Easy on humans" a my si v tomto článku ukážeme, jak ji použít.

Jak nová captcha funguje?

Google díky tomu, že includujete jeho skript, může sledovat pohyb kurzoru uživatele, klávesy, které mačká a může si zjistit i operační systém, prohlížeč či rozlišení displeje. Až do chvíle, než zaškrtnete "Nejsem robot" se tyto údaje vyhodnocují. Po zaškrtnutí se odesílají na server spolu s tím, co vy berete metodou GET (to identifikuje návštěvníka). Po zaškrtnutí se vše vyhodnotí a Google vás buď propustí, nebo vám na PC zobrazí starou reCaptchu, na mobilu vybíráte zvířátka. Celé je to sice sofistikovaný systém, ale asi bude jen chvíli trvat, než se i roboti naučí být lidštější.

Registrace

Jako první si na webu https://www.google.com/recaptcha/admin přiřadíme web, na kterém chceme reCaptchu používat, pod svůj Google účet (je nutné být přihlášen do jakékoli služby od Googlu). Potom web rozklikneme a podíváme se do kroku 1 - client-side integration (integrace na straně klienta).

Integrace reCaptcha - Bezpečnost webových aplikací v PHP

Integrace

Do hlavičky webu si vložíme skript (upraven kvůli validitě)

<script type="text/javascript" src="https://www.google.com/recaptcha/api.js"></script>

a tam, kde chceme mít formulář, vložíme kód, který jsme od Googlu získali (vy budete mít jiný):

<div class="g-recaptcha" data-sitekey="6Lc-Uv8SAAAAAAKsjm2DKzA64jWNRGkea3GA-2OI"></div>

Odbyli jsme si tu lehkou část, teď jdeme hlouběji do kódu. Před krokem jedna máme ještě Keys (klíče). Rozbalíme a uvidíme něco takového:

Site key reCaptcha - Bezpečnost webových aplikací v PHP

PHP

Vzhledem k tomu, že je tento tutorial v sekci PHP, budeme používat PHP. Vytvoříme si proměnou recaptcha, do které dekódujeme JSON soubor nacházející se na adrese: (VasSiteKey nahraďte vaším klíčem)

https://www.google.com/recaptcha/api/siteverify?secret=VasSiteKey&response=get

PHP kód:

$recaptcha = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=ITnetwork.cz&response=' . $_POST['g-recaptcha-response']));

A kde že máme vzít response? Response na stránku odesílá reCaptcha při odeslání formuláře pomocí POSTu a získáme ho tak, jak je uvedeno v kódu výše. Teď již nám jen zbývá ověřit, zda reCaptcha udělala z uživatele robota nebo člověka. Uděláme to jednoduchým ifem, protože zda je nebo není člověk rozhoduje v JSONu jen hodnota successu [bool].

if ($recaptcha->{'success'} == 'true') {
    echo('Uživatel je člověk.');
} else {
    echo('Uživatel není člověk.');
}

Aby toho nebylo málo, můžeme si hlášení rozšířit i o konkrétní chybu. Chyby jsou celkem 4 a jsou v JSONu v parametru error-codes:

  • missing-input-secret Secret kód nebyl serveru předán
  • invalid-input-secret Secret kód je neplatný
  • missing-input-response Odpověď klienta nebyla serveru předána
  • invalid-input-response Odpověď klienta je neplatná

Přidáme je jednoduše:

if ($recaptcha->{'success'} == 'true') {
    echo('Uživatel je člověk.');
} else {
    echo('Uživatel není člověk.<br>');
    if ($recaptcha->{'error-codes'}) {
        echo('Při ověřování nastala chyba: ');
        if ($recaptcha->{'error-codes'}  == 'missing-input-secret') {
            echo('Secret kód nebyl serveru předán');
        } elseif ($recaptcha->{'error-codes'}  == 'invalid-input-secret') {
            echo('Secret kód je neplatný');
        } elseif ($recaptcha->{'error-codes'}  == 'missing-input-response') {
            echo('Odpověď klienta nebyla serveru předána');
        } elseif ($recaptcha->{'error-codes'}  == 'invalid-input-response') {
            echo('Odpověď klienta je neplatná');
        }
    }
}

Doufám, že vám tento článek aspoň trochu pomohl a že z českého internetu zmizí otravné staré nečitelné reCaptchy :)

Nakonec bude web vypadat takto:

reCaptcha - Bezpečnost webových aplikací v PHP

Pokud se Googlu zdát nebudete, vybafne na vás opět stará klasická captcha.

reCaptcha - Bezpečnost webových aplikací v PHP

 

Předchozí článek
Konfigurační soubor .htaccess II. část
Všechny články v sekci
Bezpečnost webových aplikací v PHP
Článek pro vás napsal Neaktivní Účet
Avatar
Uživatelské hodnocení:
18 hlasů
Aktivity