Nová reCaptcha - Jak ji použít?

PHP Bezpečnost Nová reCaptcha - Jak ji použít?

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

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

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

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

reCaptcha

 

  Aktivity (1)

Článek pro vás napsal Michal Vašíček
Avatar
Autor je webař, čas od času udělá i mobilní appku. Před Windows dává přednost Linuxu, ale ještě raději má macOS. Podílí se na překladech v Mozille, dobrovolničí i jinde, k tomu se snaží rozvíjet sebe sama.

Jak se ti líbí článek?
Celkem (13 hlasů) :
4.153844.153844.153844.15384 4.15384


 


Miniatura
Všechny články v sekci
Bezpečnost webových aplikací v PHP
Miniatura
Následující článek
Obrana proti útoku XSS v PHP

 

 

Komentáře

Avatar
Honza Bittner
Redaktor
Avatar
Honza Bittner:

To vypadá dost dobře a hnedle jak budu moci to implementuji do mého projektu.

Otázka: Ten secret key asi nebude vhodné volit jako název sítě, což?

Odpovědět  +1 4.1.2015 10:04
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Honza Bittner
Filip Šohajek:

Ty se automaticky generují, to, co je tam uvedené je jen příklad.

 
Odpovědět  +2 4.1.2015 10:34
Avatar
Michal Vašíček
Tým ITnetwork
Avatar
Odpovídá na Honza Bittner
Michal Vašíček:

To asi určitě ne :) Každopádně i kdyby jsem tady napsal opravdový, tak jsem stejně přidal v tej administraci extra web pro toto, takže i kdybys ho znal...

Odpovědět 4.1.2015 11:10
Příspěvek může obsahovat stopy arašídů, sarkasmu a sóji.
Avatar
Honza Bittner
Redaktor
Avatar
Odpovědět 4.1.2015 11:10
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Mikuláš Staněk:

Tohle je super tohle sem potřeboval znát dík za tento příspěvěk velmi užitečný.:)

 
Odpovědět 4.1.2015 22:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.