Een CAPTCHA maken

Door Joost van Poppel, 22 jaar geleden, 7.331x bekeken

CAPTCHA zorgt voor een scheiding tussen computer- en menselijke-identificatie. Je ziet het steeds vaker voorkomen dat wanneer je ergens registreert eerst een code moet worden overgetypt. Met andere woorden wordt er gekeken of de registreerder geen flooder is, of onnodig veel accounts aanmaakt.
Hierbij een voorbeeld waarbij een CAPTCHA-image wordt aangemaakt.
(CAPTCHA = Completely Automated Public Turing Test)

Voorbeeld: http://proeftuin.dutchville.com/codegenerator/start.php

Gesponsorde koppelingen

PHP script bestanden

  1. een-captcha-maken

 

Er zijn 21 reacties op 'Een captcha maken'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jelmer -
Jelmer -
22 jaar geleden
 
0 +1 -0 -1
Als je de letters ook nog wat scheef zou drukken, of met verschillende lettertypen (helaas kan dat inderdaad alleen waneer je server speciale functies voor fornst ondersteund) zou gebruiken, zou het helemaal veilig zijn. Dit is nog niet zo moeilijk om te herkennen met een computer, al kan ik zo geen programma schrijven dat dat kan ;) En vooral veel random daarbij gebruiken. Nu zou je dus in principe een script kunnen schrijven dathet plaatje in stukjes knipt die je hebt voor gedefineerd (font met vaste breedte, dus letter komt altijd op dezelfde plek) en dan via een simpel algoritme en libgd kijken welk plaatje (plaatjes maken van ieder cijfer) het meest overeen komt. Zo kan je de code nog makkelijk laten uitlezen.

Ook de 'ditismijnsleutel' is niet echt de beste manier. Gebruik sessies, dat is toch veiliger. Nu hoef je maar 1 keer de sleutel te raden en je kan alle codes makkelijk uitlezen. Sessies daarentegen zijn niet toegangkelijk voor de browser, dus zijn een stuk 'veiliger'.
Han eev
Han eev
22 jaar geleden
 
0 +1 -0 -1
En desnoods trek willekeurige lijnen door het vlak dan word het nog moeilijker
Jelmer -
Jelmer -
22 jaar geleden
 
0 +1 -0 -1
met willekeurige kleur in dat geval. Anders zou je ze nog kunnen filteren door bij het vergelijken een bepaalde kleur te negeren.
Bart Waarom verplicht
Bart Waarom verplicht
22 jaar geleden
 
0 +1 -0 -1
Heeft er hier eigenlijk iemand een CAPTCHA kraker?
Ik wil graag weten hoe het werkt en of mijn CAPTCHA veilig is.
Marien xD
Marien xD
22 jaar geleden
 
0 +1 -0 -1
laten we er een wedstrijd van maken, miss kan bas wat regelen. Zo kan iedereen strijden om de beste Captcha :)
Joost van Poppel
Joost van Poppel
22 jaar geleden
 
0 +1 -0 -1
Goed idee, ben benieuwd
Jordi
Jordi
22 jaar geleden
 
0 +1 -0 -1
Ik vind die schuin gedrukt, vervormde, doorgestreepte dingen over het algemeen trouwens maar irritant. Ik heb weleens meegemaakt dat ik nieteens kon lezen wat er stond... :S
Legolas
Legolas
22 jaar geleden
 
0 +1 -0 -1
CAPTCHA = Completely Automated
Public Turing Test to Tell Computers and Humans
Apart
Thijs X
Thijs X
22 jaar geleden
 
0 +1 -0 -1
Idd lijp id om een CAPTCHA battle te houden :D
Thijs X
Thijs X
22 jaar geleden
 
0 +1 -0 -1
Ik heb hem even stuk stuk verbeterd, voorbeeld hier: http://php.ferket.net/
Er is nu ook geen achtergrondplaatje meer nodig want dat word automatisch gmaakt in GD

Code:
(Vergeet niet de font te uploaden ;) )

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
function decrypt($string, $key)
{

    $result = '';
    $string = base64_decode($string);
    
    for($i=0; $i<strlen($string); $i++)
    {

        $char = substr($string, $i, 1);
        $keychar = substr($key, ($i % strlen($key))-1, 1);
        $char = chr(ord($char)-ord($keychar));
        $result .= $char." ";
    }

    return $result;
}


$keycode = $_GET['showcode'];
$keycode = decrypt($keycode, "ditismijngeheimesleutel");

header("content-type: image/png");

$afbeelding = imagecreate(180, 70);
$achtergrond = imagecolorallocate($afbeelding, 255, 255, 255);
$font = "fonts/arial.ttf";

$kleur2 = imagecolorallocate($afbeelding, 192, 192, 192);
$breedte = 180;

for ($i = 0; $i < $breedte / 2; $i++)
{

    imageline($afbeelding, $i * 2, 0, $i * 2, 70, $kleur2);
}

$kleur1 = imagecolorallocate($afbeelding, 128, 128, 255);
imagerectangle($afbeelding, 0, 0, 180-1, 70-1, $kleur1);

$tekst1 = "REG CODE";
$xas1 = 55;
$yas1 = 10;
$kleur3 = imagecolorallocate($afbeelding, 255, 102, 0);
imagestring($afbeelding, 4, $xas1, $yas1, $tekst1, $kleur3);

$tekst2 = explode(" ", $keycode);
$aantal = count($tekst2);
$xas2 = 10;
$yas2 = 45;

for ($i = 0; $i < $aantal; $i++)
{

    $graden = rand(-40, 40);
    $grootte = rand(10,12);
    $kleur = imagecolorallocate($afbeelding, rand(0, 110), rand(0, 110), rand(0, 110));
    
    if($tekst2[$i] == "-")
    {

        imagettftext($afbeelding, 10, 0, $i * 12 + $xas2, $yas2, $kleur, $font, $tekst2[$i]);
    }

    else
    {    
        imagettftext($afbeelding, $grootte, $graden, $i * 12 + $xas2, $yas2, $kleur, $font, $tekst2[$i]);
    }
}

imagepng($afbeelding);
imagedestroy($afbeelding);
?>
Marien xD
Marien xD
22 jaar geleden
 
0 +1 -0 -1
misschien is het nog een idee om de achtergrond lijnen random over het scherm heen te laten gaan?
Thijs X
Thijs X
22 jaar geleden
 
0 +1 -0 -1
@ Marien ja dat zou ook nog kunnen ja misgien dat ik dat strax even probeer
BlcKJcK
BlcKJcK
22 jaar geleden
 
0 +1 -0 -1
Hoe pas je zo een CAPCHTA precies toe?

hoe controleer je dat?
Rutger Gelling
Rutger Gelling
22 jaar geleden
 
0 +1 -0 -1
Hi all,

Ik gebruik deze CAPTCHA maar nog steeds krijg ik spam op mijn gastenboek (www.derrudi.org) Iemand een idee hoe dat kan? gebruik ik hem dan verkeerd?

Groeten Rutger
Niek s
niek s
21 jaar geleden
 
0 +1 -0 -1
waar kan ik de plaatjes downloaden? als ik ze nu van de site wil halen dan moet ik een password intypen?!
Martijn Wieringa
Martijn Wieringa
21 jaar geleden
 
0 +1 -0 -1
Hier was ik precies naar op zoek; nice :D
Renate
Renate
21 jaar geleden
 
0 +1 -0 -1
ik ben een beginner wat php betreft en snap niet zo goed waar ik de verschillende gedeeltes van de script moet plaatsen.
Ik wilde ook de plaatjes downloaden, maar dan krijg je een inlogveld waar ik het password niet van ken.
Is het mogelijk een stap voor stap uitleg te geven?
groeten, Renate
 
0 +1 -0 -1
Directe link naar afbeelding die benodigd is:
bar.png
Zap
zap
21 jaar geleden
 
0 +1 -0 -1
het zou fijn zijn als er ok uitgelegd werdt hoe je het moet toepassen... want daar heb ik namelijk geen idee van :P
Katjan
katjan
21 jaar geleden
 
0 +1 -0 -1
zolang de captcha op dezelfde manier gemaakt word, (lees: met dezelfde effecten, zoals strepen, scheef zetten van letter enz) moet het mogelijk zijn om een script te schrijven wat ze achterhaald..

ik zal binnekort even kijken of ik een captcha reader kan schrijven, lijkt me interessant..

~huib
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Koko
koko
21 jaar geleden
 
0 +1 -0 -1
Hoi,

Ik heb net je scriptje gebruikt. Perfect geschikt voor basisafscherming van mijn gastenboek ;-)

Nu heb ik wel even een vraagje over de uitleg:
Zou het geen goed idee zijn om ook de controle er ergens bij te zetten? Ik heb het weliswaar zelf derin gezet gekregen, maar de beginners (niet dat ik expert ben...) krijgen het denk ik minder vlot aan de gang.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. een-captcha-maken

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.