PHP implementácia Google reCAPTCHA

Úvodom trochu teórie. CAPTCHA (skratka od anglického Completely Automated Public Turing test to tell Computers and Humans Apart) je forma testu, alebo nástroja, ktorý má rozlíšiť človeka od robota. Google reCaptcha je pomerne známy a na weboch sa často vyskytujúci prvok, ktorý by mal aktívne zabraňovať spamovaniu formulárov cez rôzne nástroje. Ukážka dizajnu reCAPTCHY je nižšie.

PHP implementácia Google reCAPTCHA

Postup integrácie do webu je pomerne jednoduchý. Zhrniem ho v nasledovných krokoch:

1. Je potrebné navštíviť portál Google reCAPTCHA a prejsť do admin konzoly:
https://www.google.com/recaptcha/intro/v3.html

2. Vytvoríme novú CAPTCHU. Je potrebné správne zadanie domény, na ktorej bude tento systém bežať. Pre testovanie na localhoste je dobré použiť tvar: 127.0.0.1, prípadne localhost.

PHP implementácia Google reCAPTCHA

3. Po zadaní vstupných nastavení služba reCAPTCHA poskytne 2 kľúče. Verejný a privátny. Verejný kľúč bude tvoriť identifikátor pre zobrazenie reCAPTCHY na webe, privátny kľúč bude použitý na overenie v PHP skriptoch.

PHP implementácia Google reCAPTCHA

4. Vytvoríme formulár, ktorý môžeme prevziať z oficiálnej dokumentácie od Google a upraviť. Všimnime si predovšetkým túto časť kódu:

<div class="g-recaptcha" data-sitekey="your_site_key"></div>

Práve tento zápis v praxi tvorí reCAPTCHU s použitím nášho verejného kľúča.

<html>
<head>
<title>reCAPTCHA demo: Simple page</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<form action="?" method="POST">
<div class="g-recaptcha" data-sitekey="your_site_key"></div>
<br/>
<input type="submit" value="Submit">
</form>
</body>
</html>

5. PHP skript, ktorý vyhodnotí CAPTCHU a spam vyzerá nasledovne. Je v ňom potrebné správne definovať privátny kľúč. Výsledná akcia je jednoducho definovaná podmienkou if / else.

if(isset($_POST['g-recaptcha-response'])) {
// RECAPTCHA SETTINGS
$captcha = $_POST['g-recaptcha-response'];
$ip = $_SERVER['REMOTE_ADDR'];
$key = 'secret key';
$url = 'https://www.google.com/recaptcha/api/siteverify';
 
// RECAPTCH RESPONSE
$recaptcha_response = file_get_contents($url.'?secret='.$key.'&response='.$captcha.'&remoteip='.$ip);
$data = json_decode($recaptcha_response);
 
if(isset($data->success) &&  $data->success === true)
{
// nie je to spam, vykonaj akciu
}
else
{
// je to spam
}
}

Ak máte záujem o integráciu systému reCAPTCHA pre váš projekt, kontaktujte ma.

Pridať komentár k článku

Arpad Kalapos: Dobry den prajem. Mal by som zaujem o nasadenie reCAPTCHA na nasu stranku. Ako je to casovo narocne a kolko by to stalo. Dakujem za odpoved. Arpad Kalapos