Rád bych vás nechal nahlédnout pod pokličku a ukázal vám dnes můj CAPTCHA PHP skript, který využívám na svém blogu. Snadnější to snad být nemůže.
CAPTCHA slouží ověření, že na druhém konci není (spamující) robot, ale člověk. Když uvážím, kolik stojí levná pracovní síla v Indii, kdy za pár šupů sedí Indové před monitory a jen louskají CAPTCHU, člověka napadne, zda to má ještě vůbec smysl. Ten spam si na váš server stejně cestu najde. :) A to nemluvím o robotech, co znají pokročilé techniky OCR a mohou sami louskat. Ale tak fajn, pojďme jim to trošku znepříjemnit.
Pro zprovoznění stačí podpora GD knihovny a SESSION v PHP, což je předpokládám naprostý standard úplně všude.
Soubor captcha.php:
<?php error_reporting(0); // nějaké ty základní parametry define('VYSKA', 70); define('SIRKA', 150); define('DELKA', 6); // používám font Creative Block BB define('FONT', 'font.ttf'); define('COPY', 'socl.cz'); // spustíme SESSION session_start(); $text = ''; // znaková sada - bez O a 0 - pletou se $abc = 'ABCDEFGHIJKLMNPQRSTUVWXYZ123456789'; $abc_len = strlen($abc); // vytvoř obrázek $im = imagecreate(SIRKA, VYSKA); // s pastelovým podkladem $pastel = imagecolorallocate($im, rand(100, 255), rand(100, 255), rand(100, 255)); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); // uděláme rámeček imagerectangle($im, 0, 0, SIRKA-1, VYSKA-1, $black); for($i=0; $i < DELKA; $i++) { $r = rand(0,4); // generujeme CAPTCHA kód znak po znaku $text .= $abc[rand(0,$abc_len-1)]; // vykreslíme znak s jednoduchým stínováním imagettftext($im, 22+$r, $r, 11+(19*$i)+$r, 39+$r, $black, FONT, $text[$i]); imagettftext($im, 22+$r, $r, 9+(19*$i)+$r, 39+$r, $black, FONT, $text[$i]); imagettftext($im, 22+$r, $r, 12+(19*$i)+$r, 41+$r, $black, FONT, $text[$i]); imagettftext($im, 22+$r, $r, 10+(19*$i)+$r, 39+$r, $white, FONT, $text[$i]); } // doplníme copyright :-) imagestring($im, 2, SIRKA-(strlen(COPY)*6+1), 0, COPY, $black); // uložíme vygenerovaný kód do SESSION $_SESSION['captcha'] = $text; // nezbytná hlavička header('Content-Type: image/png'); header("Cache-Control: no-cache, must-revalidate"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // a vyplivneme obrázek imagepng($im); imagedestroy($im); ?>
Pokud pak skript zavoláte ve svém HTML kódu, např.
<img src="captcha.php" border="0" alt="captcha" />
měli byste vidět podobně vygenerovaný obrázek:
vygenerovaná CAPTCHA
Když pak zpracováváte data z formuláře, ve kterém byla takto CAPTCHA vygenerována, stačí zkontrolovat, zda zadaný kód z formuláře sedí s uloženým kódem v SESSION. Díky relativně velkým možnostem GD knihovny můžete takový obrázek vylepšovat dle libosti. Proč nemít každý znak jiným fontem nebo barvou, že? :)
Tweetštítky: bezpečnost CAPTCHA PHP spam
8033x přečteno
28. 12. 2018 v 5:17 Frantisek napsal(a)
132
11. 4. 2022 v 10:35 test napsal(a)
test
Copyright © 2015-2024 SOCL.cz, RSS 2.0
Všechna práva vyhrazena, nebo tak nějak.