Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Nová reCAPTCHA - Ako ju použiť?

V predchádzajúcej lekcii, Technika útoku SQL injection , sme sa zoznámili s útokom SQL injection.

Otravní roboti alebo nečitateľný text. Až doteraz problém väčšiny webmasterov, ktorí používali (alebo nepoužívali) captcha, konkrétne reCAPTCHA od Googlu. Ten ale vypustil novú verziu so sloganom "Tough on bots, Easy on humans" a my si v tomto článku ukážeme, ako ju použiť.

Ako nová captcha funguje?

Google vďaka tomu, že includujete jeho skript, môže sledovať pohyb kurzora užívateľa, klávesy, ktoré krčí a môže si zistiť aj operačný systém, prehliadač či rozlíšenie displeja. Až do chvíle, než zaškrtnete "Nie som robot" sa tieto údaje vyhodnocujú. Po zaškrtnutí sa odosielajú na server spolu s tým, čo vy beriete metódou GET (to identifikuje návštevníka). Po zaškrtnutí sa všetko vyhodnotí a Google vás buď prepustí, alebo vám na PC zobrazí starú reCAPTCHA, na mobile vyberáte zvieratká. Celé je to síce sofistikovaný systém, ale asi bude len chvíľu trvať, než sa i roboti naučia byť ľudskejší.

Registrácia

Ako prvý si na webe https://www.google.com/recaptcha/admin priradíme web, na ktorom chceme reCAPTCHA používať, pod svoj Google účet (je nutné byť prihlásený do akejkoľvek služby od Googlu). Potom web rozkliknite a pozrieme sa do kroku 1 - client-side integration (integrácia na strane klienta).

integrácia reCAPTCHA - Bezpečnosť webových aplikácií v PHP

Integrácia

Do hlavičky webu si vložíme skript (upravený kvôli validite)

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

a tam, kde chceme mať formulár, vložíme kód, ktorý sme od Googlu získali (vy budete mať iný):

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

Odbili sme si tú ľahkú časť, teraz ideme hlbšie do kódu. Pred krokom jedna máme ešte Keys (kľúče). Rozbalíme a uvidíme niečo takéto:

Site key reCAPTCHA - Bezpečnosť webových aplikácií v PHP

Php

Vzhľadom k tomu, že je tento tutorial v sekcii PHP, budeme používať PHP. Vytvoríme si premenou reCAPTCHA, do ktorej dekódujú JSON súbor nachádzajúci sa na adrese: (VasSiteKey nahraďte vašim kľúčom)

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 vziať response? Response na stránku odosiela reCAPTCHA pri odoslaní formulára pomocou POSTe a získame ho tak, ako je uvedené v kóde vyššie. Teraz už nám len zostáva overiť, či reCAPTCHA urobila z užívateľa robota alebo človeka. Urobíme to jednoduchým IFEMA, pretože či je alebo nie je človek rozhoduje v JSON len hodnota Success [bool].

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

Aby toho nebolo málo, môžeme si hlásenie rozšíriť aj o konkrétnej chybu. Chyby sú celkom 4 a sú v JSON v parametri error-codes:

  • missing-input-secret Secret kód nebol servera odovzdaný
  • invalid-input-secret Secret kód je neplatný
  • missing-input-response Odpoveď klienta nebola serveru odovzdaná
  • invalid-input-response Odpoveď klienta je neplatná

Pridáme ich jednoducho:

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á');
        }
    }
}

Dúfam, že vám tento článok aspoň trochu pomohol a že z českého internetu zmizne otravné staré nečitateľné reCAPTCHA :)

Nakoniec bude web vyzerať takto:

reCAPTCHA - Bezpečnosť webových aplikácií v PHP
Ak sa Googlu zdať nebudete, vybafne na vás opäť stará klasická captcha.
reCAPTCHA - Bezpečnosť webových aplikácií v PHP

V ďalšej lekcii, Útok CSRF (Cross Site Request Forgery) a ako sa brániť , sa zoznámime s útokom Cross Site Request Forgery a uvedieme si spôsoby ako sa pred týmto typom útoku brániť.


 

Predchádzajúci článok
Technika útoku SQL injection
Všetky články v sekcii
Bezpečnosť webových aplikácií v PHP
Preskočiť článok
(neodporúčame)
Útok CSRF (Cross Site Request Forgery) a ako sa brániť
Článok pre vás napísal Neaktivní Účet
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Aktivity