Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Best gaming laptop?

Humane (2024)

Recomandare casti 100-150 lei

Schimbare bec far VW Touran 1T3
 Plata impozit PF

Ce parere aveti de viteza/ modul ...

Love Lies Bleeding - 2024

Cum sterg mails din Promotions
 Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica

Ce componenta e asta si ce ziceti...
 Dupa 20 ani de facultate, am uita...

Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg
 

tutorial: captcha pentru incepatori

- - - - -
  • Please log in to reply
23 replies to this topic

#1
aolex

aolex

    Senior Member

  • Grup: Banned
  • Posts: 3,829
  • Înscris: 06.12.2004
ceau :wave:!

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! :w00t:

#2
MadMax

MadMax

    Pike hunter

  • Grup: Senior Members
  • Posts: 2,361
  • Înscris: 14.05.2003
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
aolex

aolex

    Senior Member

  • Grup: Banned
  • Posts: 3,829
  • Înscris: 06.12.2004
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 :P.

Edited by aolex, 15 April 2006 - 10:53.


#4
Evil's Toy

Evil's Toy

    Member

  • Grup: Members
  • Posts: 470
  • Înscris: 10.09.2004
n-ar strica macar un thread in care sa faceti un index al topicurilor de genul asta si o mica descriere pentru fiecare.

#5
add

add

    Senior Member

  • Grup: Senior Members
  • Posts: 8,146
  • Înscris: 09.09.2003
pai e un problem, daca poza arata asa orice ocr poate scoate din ea codul :|

#6
aolex

aolex

    Senior Member

  • Grup: Banned
  • Posts: 3,829
  • Înscris: 06.12.2004
spune-mi te rog cum anume ca sa imbunatatesc metoda :).

#7
add

add

    Senior Member

  • Grup: Senior Members
  • Posts: 8,146
  • Înscris: 09.09.2003
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
aolex

aolex

    Senior Member

  • Grup: Banned
  • Posts: 3,829
  • Înscris: 06.12.2004
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
assault

assault

    Member

  • Grup: Members
  • Posts: 415
  • Înscris: 29.09.2005
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 :P.

@add site-urile mari se folosesc de The Captcha Project :)

#10
don_dannielo

don_dannielo

    Bah! Are we more than dumb sheep?

  • Grup: Senior Members
  • Posts: 35,456
  • Înscris: 27.06.2004
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
assault

assault

    Member

  • Grup: Members
  • Posts: 415
  • Înscris: 29.09.2005

 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
don_dannielo

don_dannielo

    Bah! Are we more than dumb sheep?

  • Grup: Senior Members
  • Posts: 35,456
  • Înscris: 27.06.2004
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
don_dannielo

don_dannielo

    Bah! Are we more than dumb sheep?

  • Grup: Senior Members
  • Posts: 35,456
  • Înscris: 27.06.2004
Si inca o intrebare, de data asta ontopic  :D

Cum poti face textul ingrosat?

#14
aolex

aolex

    Senior Member

  • Grup: Banned
  • Posts: 3,829
  • Înscris: 06.12.2004
schimbi fontul. momentan e 2, pune 3 sau 4, experimenteaza!

#15
NemoXP

NemoXP

    Junior Member

  • Grup: Members
  • Posts: 63
  • Înscris: 12.01.2006
cum pot pune un backgorund mai complicat?adica sa nu mai fie albul ala..

#16
again

again

    WEB DUDE

  • Grup: Senior Members
  • Posts: 7,068
  • Înscris: 21.10.2005
$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)

#17
SmileYBosS

SmileYBosS

    Junior Member

  • Grup: Members
  • Posts: 109
  • Înscris: 02.09.2005
Cum se poate pune o imagine pe background?

#18
tot_ce_poti

tot_ce_poti

    Junior Member

  • Grup: Members
  • Posts: 184
  • Înscris: 29.09.2005

 SmileYBosS, on Jan 6 2007, 07:56, said:

Cum se poate pune o imagine pe background?
parca era o  functie  ceva de gnul  imagecopy(url) sau  asemanator iar ptr distorsionarea imaginilor din cate stiu eu  se pot folosi  functii care sa flitreze imaginea ...

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate