Captcha er i øjeblikket en af de mest almindelige måder at beskytte gratis formater på. Det blev oprindeligt ikke oprettet for at beskytte datasikkerheden, men for at beskytte mod spam og for at erkende, at det er et menneske.
Det er dog maskinelt genereret, så det er ikke altid perfekt, men succesraten for en captcha-test ligger et sted omkring 99 %, og kun 1 % af billederne kan afkodes af en velkonstrueret spamrobot.
Der er flere muligheder, f.eks. bruger jeg denne løsning:
Hvis captcha-testen kan løses, er brugeren sandsynligvis et menneske. Men det er godt at tænke på brugere, der ikke kan løse opgaven, især blinde brugere. Det er en god løsning til at kombinere flere mulige tests (især voice prefetching). Stemmegenkendelse af en maskine er dog i øjeblikket betydeligt mere effektiv end oplæsning af et billede. Derfor er denne løsning ikke altid ideel.
Ofte er det nok at generere et tomt billede med bestemte dimensioner og indtaste et par tegn i det på en læselig måde uden yderligere redigering. Helt ærligt! De fleste spam-bots er dumme og kan ikke angribe generiske formularer med denne type beskyttelse, selv om der er tale om perfekt læsbar tekst, som bedre OCR kan transskribere perfekt.
Det resulterende billede kan se således ud:
<img src="captcha.php" alt="ukázková captcha">
Prøv at opdatere siden et par gange, og du vil se, at koden ændres tilfældigt hver gang. Til demonstrationsformål genereres den blot uden at blive gemt, så den fjernes straks efter at du har indlæst den.
Jeg har løst kildekoden ved hjælp af PHPGD-biblioteket, som er tilgængeligt på stort set alle PHP-installationer og -hosting:
Header("Indholdstype: image/png");$obr = ImageCreate(100, 35);$pozadi = ImageColorAllocate ($obr, 219, 28, 49); //definition af baggrundsfarve$bila = ImageColorAllocate ($obr, 255, 255, 255); //definition af hvid farve for tekst$styl = array ($pozadi);ImageSetStyle ($obr, $styl);$nahodne_cislo = rand(11111,99999); //trækning af et tilfældigt tal på 5 tegnimagestring($obr, 5, 25, 10, $nahodne_cislo, $bila); //funktion til at tegne tekst (i dette tilfælde et tal)ImagePNG($obr); //generering af billedet i hukommelsen og renderingImageDestroy($obr); //slette billedet fra hukommelsen (der er ikke længere brug for det, fordi det er genereret én gang)
Det er så bare et spørgsmål om HTML at gengive billedet:
<img src="captcha.php">
Bemærk, at dette script ikke fungerer i sig selv uden yderligere ændringer. Det tjener kun som en demonstration til at generere et simpelt billede.
Captcha-tests er ret pålidelige, men irriterende og tidskrævende. Nogle gange er de ikke læselige, så det er rart at give brugeren mulighed for at indlæse et andet billede ved hjælp af javascript, så hele siden ikke skal genindlæses, og alt skal udfyldes igen.
Husk: Det, der er en triviel opgave for et menneske, kan aldrig være en mulig løsning for en maskine. Derfor kan selv denne primitive captcha med perfekt læsbar tekst beskytte mod mere end halvdelen af spam.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | da