Thread Captcha "einbauen" ? (23 answers)
Opened by BerndHennig at 2013-01-23 08:34

GwenDragon
 2013-01-23 11:39
#165139 #165139
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Mal kurz nachgedacht und als Text-Captcha ins unreine geschrieben. Kann ja als Anregung dienen.

Code (perl): (dl )
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
my @captchas = (
        #capID,Frage,Antwort
        "123456#Farbe des Himmels#blau",
        "567851#Summe aus Drei und Sieben#10",
        "918265#Fünf mal Zwei minus Drei#7",
        "218153#Ein Cirrus ist eine ...#Wolke"
);

sub generate_captcha {
        my $zufallsindex = int rand scalar @captchas;
        my ($capid,$frage,$antwort) = split /#/,$captchas[$zufallsindex];
        return ($capid,$frage,$antwort);
}

sub check_captcha {
        my ($id,$answer) = @_;
        
        # Leerzeichen entfernen
        $answer =~ s/^\s//g;   
        $answer =~ s/\s$//g;
        
        return 0 if not length($answer);   # ungültige leere Antwort
        return 0 if not ($id =~ /^\d+$/);  # ungültiger ID, keine Ziffern
        
        my $found = grep /^${id}#.+#\Q${answer}\E$/,@captchas;  
        return $found;
}


my $captcha_antwort = CGI::param('capans'); 
my $captcha_id = CGI::param('capid');
my $captcha_geloest = 0;

if (!length($captcha_antwort) and !length($captcha_id)) { 
        ($captcha_id, $captcha_frage, undef) = generate_captcha();      
}
else {
        $captcha_geloest = check_captcha($captcha_id,$captcha_antwort);
}



im Formular dann noch eintragen:

Code: (dl )
1
2
Frage: $captcha_frage <input type="text" name="capans" value="$captcha_antwort">
<input type="hidden" name="capid" value="$captcha_id">


PS: Ich weiß nicht, ob die Lizenzbedingungen von e-classified überhaupt Codeänderungen zulassen.

//EDIT: Tippfehler, muss noch lernen captcha richtig zu schreiben ;)
Zeile 35 geändert
Last edited: 2013-01-23 11:58:11 +0100 (CET)

View full thread Captcha "einbauen" ?