tutorial: captcha pentru incepatori
Last Updated: Jun 24 2008 14:24, Started by
aolex
, Apr 15 2006 00:27
·
0
#1
Posted 15 April 2006 - 00:27
ceau !
as vrea sa postez un tutorial mic despre cum se implementeaza captcha intr-un form, pentru a reduce cantitatea de spam. Ce este captcha? pe scurt: completely automated public turing test to tell computers and humans apart captcha este o solutie anti-spam/flood in utilizarea formurilor. de multe ori ati observat ca pentru a posta un comentariu, de exemplu, era nevoie sa confirmati acest lucru cu un cod aflat intr-o imagine... ei bine, asta e captcha. probabil ca va intrebati prin ce difera metoda mea fata de altele... ei bine, metoda aceasta este foarte simpla, numai ce e nevoie, astfel incat implementarea ei este o joaca de copii. trebuie sa instalez ceva pe server? nu, captcha e un singur fisier php care necesita libraria GD (majoritatea hosturilor o au, ruleaza gd_info() pentru a vedea daca dispui de aceasta librarie). sa vedem sursa: <?php session_start(); $_SESSION['captcha'] = mt_rand(100000, 999999); $image = imagecreate(128, 32); $bgcol = imagecolorallocate($image, 0xff, 0xff, 0xff); $txcol = imagecolorallocate($image, 0x00, 0x00, 0x00); $strn2 = imagestring($image, 2, 0, 0, $_SESSION['captcha'], $txcol); header("Content-type: image/png"); imagepng($image); imagedestroy($image); ?> sa explicam: session_start(); - aceasta functie va porni o noua sesiune ca sa putem transmite string-ul nostru captcha de la o pagina la alta fara complicatii. o nimica toata... $_SESSION['captcha'] = mt_rand(100000, 999999); - pe aceasta linie vom defini string-ul captcha (valabil in sesiunea noastra) cu un numar random format din 6 cifre. $image = imagecreate(128, 32); - creem imaginea pe care o vom afisa mai tarziu cu marimea 128x32 pixeli. $bgcol = imagecolorallocate($image, 0xff, 0xff, 0xff); - alocam culoarea de background. in cazul nostru, aceasta este alba (#ffffff). $txcol = imagecolorallocate($image, 0x00, 0x00, 0x00); - alocam culoarea de test. in cazul nostru, aceasta este neagra (#000000). $strn2 = imagestring($image, 2, 0, 0, $_SESSION['captcha'], $txcol); - scriem stringul captcha (pe care l-am generat mai sus) pe imaginea de la pasul 3. header("Content-type: image/png"); - spunem browserului ca are de-a face cu un fisier png. imagepng($image); - creem imaginea pentru afisare... imagedestroy($image); - eliberam resursele folosite. daca libraria GD este disponibila pe server, va trebuie sa avem o imagine ca cea de mai jos: [attachment=111380:attachment] acum, implementarea. in form-ul nostru, vom adauga imaginea folosind codul: <img src='captcha.php' alt='captcha'> si un input in care userul va trebui sa completez codul random de forma: <input type='text' name='captcha' size='6'> acuma tot ce trebuie sa facem pe pagina de verificare e sa comparam codul din casuta de mai sus cu codul din sesiune. cum? simplu : <?php session_start(); $captcha = $_POST['captcha']; if($captcha == $_SESSION['captcha']) { /* efectuam operatia de adaugare a stirilor etc. ... */ } else { /* chemam politia, anuntam pompierii etc. ... */ } ?> ========================= Intrebari: 1. Cum pot schimba marimea literelor? - pe linia 12 a scriptului ($strn2 = imagestring($image, 2, 0, 0, $_SESSION['captcha'], $txcol);) schimbam al 2-lea argument (care momentan este 2). valorile posibile: 1, 2, 3, 4, 5. 1 este un font mic, 5 este un font mare. 2. Cum pot schimba culorile acestei imagini? - liniile 8 si 10 ale scriptului contin culorile pentru fond, respectiv text. pentru schimbarea lor avem doua posibilitati: valori hexagonale sau valori RGB. pentru #cc0000 (rosu inchis) folosim 0xcc, 0x00, 0x00 iar pentru verde (in format RGB) folosim 0, 255, 0. 3. Pot schimba lungimea sirului de caractere generat? - da, inlocuind argumentele functiei mt_rand de pe linia 4. pentru un sir de 8 caractere, de exemplu, folosim mt_rand(10000000, 99999999);. ========================= mult succes! |
#2
Posted 15 April 2006 - 07:12
La un moment dat, ada80ro a propus sa adunam intr-un loc mai multe informatii de acest gen si ideea mi s-a excelenta.
@aolex: daca mai ai materiale de genul acesta, eventual putem sa ne gandim la un "format" si le punem intr-un singur sticky pe toate. |
#3
Posted 15 April 2006 - 10:49
m-am gandit si eu la asta dar daca pui toate astea intr-un topic, iese salata din care nu mai intelege nimeni nimic, cum e la unix. asa ca propun o categorie de tutoriale in cadrul acestei categorii (php) unde sa postam toate celea.
PS: nu mai am materiale dar voi avea. astea le fac, nu le culeg . Edited by aolex, 15 April 2006 - 10:53. |
#4
Posted 15 April 2006 - 12:59
n-ar strica macar un thread in care sa faceti un index al topicurilor de genul asta si o mica descriere pentru fiecare.
|
#5
Posted 15 April 2006 - 13:08
pai e un problem, daca poza arata asa orice ocr poate scoate din ea codul :|
|
#7
Posted 15 April 2006 - 13:27
pai lool. n-am lucrat cu astea, dar la google, yahooo si saiturile mari care mai folosesc au fonturi ciudate, culori diferite la litere, si au un distort pe cuvant ca sa fie dificila recunoasterea.
|
#8
Posted 15 April 2006 - 13:31
ca sa afli codul secret, trebuie sa compari imaginea curenta (in format base64, de exemplu) cu o imagine generata pe serverul tau cu acelasi cod. care e probalitatea ca codurile generate sa fie la fel tocmai in momentul cand bot-ul compara cele 2 siruri? eu zic ca n-ar trebui sa ne facem probleme... .
|
#9
Posted 15 April 2006 - 13:35
eu cand am facut un captcha am pus o imagine de background am copiat un font mai "imbarligat" am pe server am incercat sa complic putin imaginea .
@add site-urile mari se folosesc de The Captcha Project |
#10
Posted 05 May 2006 - 15:15
O intrebare putin offtopic. Vreau ca o imagine de genul asta sa fie apelata cu extensia .jpg sau .png, nu .php. Cum pot sa fac, Merge din .htacces? La httpd.conf n-am acces.
|
|
#11
Posted 05 May 2006 - 15:37
don_dannielo, on May 5 2006, 16:15, said: O intrebare putin offtopic. Vreau ca o imagine de genul asta sa fie apelata cu extensia .jpg sau .png, nu .php. Cum pot sa fac, Merge din .htacces? La httpd.conf n-am acces. da poti pui extensia fisierului din .php in .jpg si un .htaccess in care pui <Files *.jpg> ForceType application/x-httpd-php </Files> that should do the trick |
#12
Posted 05 May 2006 - 16:14
Merci, dar dintr-un motiv oarecare se pare ca nu merge (o fi serverul de vina)
Insa merge cu RewriteEngine on RewriteRule image.png image.php Edited by don_dannielo, 05 May 2006 - 16:22. |
#13
Posted 05 May 2006 - 16:26
Si inca o intrebare, de data asta ontopic
Cum poti face textul ingrosat? |
#14
Posted 05 May 2006 - 16:29
schimbi fontul. momentan e 2, pune 3 sau 4, experimenteaza!
|
#15
Posted 15 December 2006 - 11:15
cum pot pune un backgorund mai complicat?adica sa nu mai fie albul ala..
|
|
#16
Posted 15 December 2006 - 22:37
$bgcol = imagecolorallocate($image, 0xff, 0xff, 0xff);
0xff ... ala e codul de culoare (nu stiu exact ce fel de cod e dar poti face ceva modificari si vezi ce iese) |
#18
Posted 06 January 2007 - 20:03
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users