Captcha script
Ik ben nog een beetje een loser in php, maar zit met het grote probleem dat de reacties op mijn website compleet volgespamt worden. Heel irri want mn site word super langzaam.. Nu heb ik een aantal van die scripts geprobeerd, maar ik krijg t niet aan de praat. Zou iemand me kunnen helpen met het includen van een captcha op mijn eigen website?
Alvast heel erg bedankt!
(voorbeeld pagina http://www.noukster.com/dynamic/index.php?viewstate=newsitem&newsitem_id=236 )
Wat lukt er dan niet?
en captcha werkt wss alleen tegen bots, het zal mensen gewoon hooguit een beetje langzamer laten spammen.
Dus je kunt het best een maximaal aantal posts per minuut/uur/dag laten doen, of gewoon ip's gaan blokkeren.
Het zijn 100derden berichten per dag..
Met max aantal berichten los ik t niet op, word het hooguit wat minder.
Wat er niet lukt? Ik krijg geen enkele captcha goed werkend, of een kruisje, of helemaal niks, of overal errors :p
T moet natuurlijk op pas gaan checken als mensen de reactie versturen.
Akismet eens.
Probeer aapjuh schreef op 05.10.2008 14:52:
Zo te zien zijn het geen bots
En waaraan kan jij dat zien?
Code (php)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
$aant = "4";//this varable can be 2-40
$height = "22";
$SQUARE = "0";//this varable can be 1 = ON, 0 = OFF
$possible = 'ABCDEFGHIJKLMNPQRSTUVWXYZ123456';//Characters used in code
$Background = "WHITE"; // this varible can be AUTO, WHITE, RED, GREEN, BLUE
$LINES = "1";//Draw lines? this varable can be 1 = ON, 0 = OFF
$LINES_OVER = "0";//Draw lines Over text? this varable can be 1 = ON, 0 = OFF
//Start de sessie
session_start();
function generateCode($characters,$possible) {
$code = '';
$i = 0;
while ($i < $characters) {
$code[] = substr($possible, mt_rand(0, strlen($possible)-1), 1);
$codestr.=substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
// Maak 't plaatje
$width= $aant * 25;
$im = imagecreate($width, $height);
//Achtergrond kleur
$Background = strtoupper ($Background);
if ($Background=="AUTO"){
$bg = imagecolorallocate($im, rand(190,255), rand(190,255), rand(190,255));
}elseif($Background=="WHITE"){
$bg = imagecolorallocate($im, 254, 254, 254);
}elseif($Background=="RED"){
$bg = imagecolorallocate($im, 255 , 0, 0);
}elseif($Background=="GREEN"){
$bg = imagecolorallocate($im, 0, 255, 0);
}elseif($Background=="BLUE"){
$bg = imagecolorallocate($im, 0, 0, 255);
}else{
$bg = imagecolorallocate($im, 255, 255, 255);
}
// Genereer de code
$code= generateCode($aant,$possible);
if($LINES=="1" ){
// Teken variabele lijnen
$i=0;
while( $i<($width*$height)/150) {
$noise_color = imagecolorallocate($im, 230, 230, 230);
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
if($SQUARE=="1" ){
// Teken een vierkand van 2 punten
$vierkand = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
imageline($im, 0, 0, $width, 0, $vierkand);
imageline($im, 0, 1, $width, 1, $vierkand);
imageline($im, $width-1, 0, $width-1, $height, $vierkand);
imageline($im, $width-2, 0, $width-2, $height, $vierkand);
imageline($im, $width-1, $height-1, 0, $height-1, $vierkand);
imageline($im, $width-1, $height-2, 0, $height-2, $vierkand);
imageline($im, 0, $height, 0, 0, $vierkand);
imageline($im, 1, $height, 1, 0, $vierkand);
}
$widthpercar= 25;
//zorg er voor dat de text niet over elkaar gaat staan
$i = 0;
while ($i < $aant) {
$min=($widthpercar*$i) - 1;
$max=$widthpercar*$i;
$textcolor = imagecolorallocate($im, 65, 175, 210);
if ($i == 0){
imagestring($im, 28, rand(0,$widthpercar), rand(0,$height-14), $code[$i], $textcolor);
}elseif ($i==$aant){
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}else{
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}
$codestr = $codestr . $code[$i];
$i++;
}
if($LINES_OVER=="1" ){
// teken voor de zekerheid nog ff 2 lijnen OVER de text
$i=0;
while( $i<2) {
$noise_color = imagecolorallocate($im, rand(230,255), rand(230,255), rand(230,255));
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
$_SESSION['security_code'] = md5($codestr);
// Print het plaatje
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
$aant = "4";//this varable can be 2-40
$height = "22";
$SQUARE = "0";//this varable can be 1 = ON, 0 = OFF
$possible = 'ABCDEFGHIJKLMNPQRSTUVWXYZ123456';//Characters used in code
$Background = "WHITE"; // this varible can be AUTO, WHITE, RED, GREEN, BLUE
$LINES = "1";//Draw lines? this varable can be 1 = ON, 0 = OFF
$LINES_OVER = "0";//Draw lines Over text? this varable can be 1 = ON, 0 = OFF
//Start de sessie
session_start();
function generateCode($characters,$possible) {
$code = '';
$i = 0;
while ($i < $characters) {
$code[] = substr($possible, mt_rand(0, strlen($possible)-1), 1);
$codestr.=substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}
// Maak 't plaatje
$width= $aant * 25;
$im = imagecreate($width, $height);
//Achtergrond kleur
$Background = strtoupper ($Background);
if ($Background=="AUTO"){
$bg = imagecolorallocate($im, rand(190,255), rand(190,255), rand(190,255));
}elseif($Background=="WHITE"){
$bg = imagecolorallocate($im, 254, 254, 254);
}elseif($Background=="RED"){
$bg = imagecolorallocate($im, 255 , 0, 0);
}elseif($Background=="GREEN"){
$bg = imagecolorallocate($im, 0, 255, 0);
}elseif($Background=="BLUE"){
$bg = imagecolorallocate($im, 0, 0, 255);
}else{
$bg = imagecolorallocate($im, 255, 255, 255);
}
// Genereer de code
$code= generateCode($aant,$possible);
if($LINES=="1" ){
// Teken variabele lijnen
$i=0;
while( $i<($width*$height)/150) {
$noise_color = imagecolorallocate($im, 230, 230, 230);
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
if($SQUARE=="1" ){
// Teken een vierkand van 2 punten
$vierkand = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));
imageline($im, 0, 0, $width, 0, $vierkand);
imageline($im, 0, 1, $width, 1, $vierkand);
imageline($im, $width-1, 0, $width-1, $height, $vierkand);
imageline($im, $width-2, 0, $width-2, $height, $vierkand);
imageline($im, $width-1, $height-1, 0, $height-1, $vierkand);
imageline($im, $width-1, $height-2, 0, $height-2, $vierkand);
imageline($im, 0, $height, 0, 0, $vierkand);
imageline($im, 1, $height, 1, 0, $vierkand);
}
$widthpercar= 25;
//zorg er voor dat de text niet over elkaar gaat staan
$i = 0;
while ($i < $aant) {
$min=($widthpercar*$i) - 1;
$max=$widthpercar*$i;
$textcolor = imagecolorallocate($im, 65, 175, 210);
if ($i == 0){
imagestring($im, 28, rand(0,$widthpercar), rand(0,$height-14), $code[$i], $textcolor);
}elseif ($i==$aant){
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}else{
imagestring($im, 28, rand($min+8,$max), rand(0,$height-14), $code[$i], $textcolor);
}
$codestr = $codestr . $code[$i];
$i++;
}
if($LINES_OVER=="1" ){
// teken voor de zekerheid nog ff 2 lijnen OVER de text
$i=0;
while( $i<2) {
$noise_color = imagecolorallocate($im, rand(230,255), rand(230,255), rand(230,255));
imageline($im, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $noise_color);
$i++;
}
}
$_SESSION['security_code'] = md5($codestr);
// Print het plaatje
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
edit: je kan deze hier in de scripts library van phphulp vinden, ik heb het wat verneukt omdat het anders niet bij mn design paste (het werkt wel hoor maar heb tekstkleur in blauw gdn ipv verschillende kleure)
zo ziet ie er uit http://beta.paradox-productions.net/inc/captcha.inc.php
Gewijzigd op 01/01/1970 01:00:00 door Wouter De Schuyter
En dan?
Kan ik dat gewoon includen in mijn eigen pagina?
Hoe fiets ik m er goed in dan?
Code (php)
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
65
66
67
68
69
70
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
65
66
67
68
69
70
<?php en ?>
<?
f_header("");
?>
<div class=newstitle>
Voeg je reactie toe
</div>
<div class=newsbody>
<table style="width:100%" cellpadding=0 cellspacing=0>
<?
f_textbox($my_result, "Jouw naam","name","200px","/\b[A-Z0-9_-]+\b/i",true);
f_textbox($my_result, "Emailadres","email","200px","/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i",true);
f_textarea($my_result, "Bericht","html","350px","80px","/\b[A-Z0-9_-]+\b/i",true);
?>
</table>
<?
f_footer();
?>
</div>
<?
// if postback and no errors on form then we can save the values
if (ispostback()) {
if (!f_errors()) {
$my_mode = 'new';
$my_table = 'SITE_NEWS_REACTIONS';
$site_debug = false;
switch ($my_mode) {
case "edit":
$my_update_sql = "update ".$my_table." set ";
$my_update_sql .= "question='".mysql_real_escape_string(f_value($my_result, "question"))."'".", ";
$my_update_sql .= "answer='".mysql_real_escape_string(f_value($my_result, "thisisaneditor_answer"))."'".", ";
$my_update_sql .= "order_=".mysql_real_escape_string(f_value($my_result, "order_")).", ";
$my_update_sql .= "locked=".mysql_real_escape_string(f_value_checkbox(f_value($my_result, "locked")))."";
$my_update_sql .= " where id=".$my_id;
if ($site_debug) print "my_update_sql = ".$my_update_sql;
if (!$site_debug) {
db_query ($my_db, $my_update_sql);
header ("location: faqs.php?mode=edit&id=".$my_site_faqs_id);
}
exit;
break;
case "new":
//$site_debug = true;
$my_insert_sql = "insert into ".$my_table." (";
$my_insert_sql .= "name,email,site_news_id,html";
$my_insert_sql .= ") values (";
$my_insert_sql .= "'".mysql_real_escape_string(f_value($my_result, "name"))."'".", ";
$my_insert_sql .= "'".mysql_real_escape_string(f_value($my_result, "email"))."'".", ";
$my_insert_sql .= "".$my_newsitem_id."".", ";
$my_insert_sql .= "'".mysql_real_escape_string(f_value($my_result, "html"))."'"."";
$my_insert_sql .= ")";
if ($site_debug) print "my_insert_sql = ".$my_insert_sql;
if (!$site_debug) {
db_query ($my_db, $my_insert_sql);
header ("location: index.php?viewstate=newsitem&newsitem_id=".$my_newsitem_id);
}
exit;
break;
}
} else {
print $error_fields;
}
}
?>
</div>
<?php en ?>
<?
f_header("");
?>
<div class=newstitle>
Voeg je reactie toe
</div>
<div class=newsbody>
<table style="width:100%" cellpadding=0 cellspacing=0>
<?
f_textbox($my_result, "Jouw naam","name","200px","/\b[A-Z0-9_-]+\b/i",true);
f_textbox($my_result, "Emailadres","email","200px","/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i",true);
f_textarea($my_result, "Bericht","html","350px","80px","/\b[A-Z0-9_-]+\b/i",true);
?>
</table>
<?
f_footer();
?>
</div>
<?
// if postback and no errors on form then we can save the values
if (ispostback()) {
if (!f_errors()) {
$my_mode = 'new';
$my_table = 'SITE_NEWS_REACTIONS';
$site_debug = false;
switch ($my_mode) {
case "edit":
$my_update_sql = "update ".$my_table." set ";
$my_update_sql .= "question='".mysql_real_escape_string(f_value($my_result, "question"))."'".", ";
$my_update_sql .= "answer='".mysql_real_escape_string(f_value($my_result, "thisisaneditor_answer"))."'".", ";
$my_update_sql .= "order_=".mysql_real_escape_string(f_value($my_result, "order_")).", ";
$my_update_sql .= "locked=".mysql_real_escape_string(f_value_checkbox(f_value($my_result, "locked")))."";
$my_update_sql .= " where id=".$my_id;
if ($site_debug) print "my_update_sql = ".$my_update_sql;
if (!$site_debug) {
db_query ($my_db, $my_update_sql);
header ("location: faqs.php?mode=edit&id=".$my_site_faqs_id);
}
exit;
break;
case "new":
//$site_debug = true;
$my_insert_sql = "insert into ".$my_table." (";
$my_insert_sql .= "name,email,site_news_id,html";
$my_insert_sql .= ") values (";
$my_insert_sql .= "'".mysql_real_escape_string(f_value($my_result, "name"))."'".", ";
$my_insert_sql .= "'".mysql_real_escape_string(f_value($my_result, "email"))."'".", ";
$my_insert_sql .= "".$my_newsitem_id."".", ";
$my_insert_sql .= "'".mysql_real_escape_string(f_value($my_result, "html"))."'"."";
$my_insert_sql .= ")";
if ($site_debug) print "my_insert_sql = ".$my_insert_sql;
if (!$site_debug) {
db_query ($my_db, $my_insert_sql);
header ("location: index.php?viewstate=newsitem&newsitem_id=".$my_newsitem_id);
}
exit;
break;
}
} else {
print $error_fields;
}
}
?>
</div>
<?php en ?>
Gewijzigd op 01/01/1970 01:00:00 door Mir
<img src="captcha.php" alt="Captcha code" />
en dan controleer je gewoon de sessie $_SESSION['security_code'] met je post gegevens zo iets md5($_POST['captcha'])
en ja het moet in de md5 functie aangezien ik op lijn 101 de secuirty code ook in een md5() steek.
Da's handig voor de bots, om ze alvast te vertellen in welk plaatje de captcha zit! Geen alt opgeven dus.
Waarschijnlijk gaat t daar namelijk steeds mis met wat ik doe :p
Ik zou er heel blij mee zijn :)
Evert schreef op 05.10.2008 22:25:
dan is de pagina niet valid, doe dan gewoon <img src="lol.php" alt="lol" /> ofzo..Da's handig voor de bots, om ze alvast te vertellen in welk plaatje de captcha zit! Geen alt opgeven dus.
@mir;
ja dat kan maar waar is je controle structuur van je formulier?
Gewijzigd op 01/01/1970 01:00:00 door Wouter De Schuyter
Quote:
Alléén relevante code plaatsen. Niet een compleet script van bijna 800 regels. Sorry, maar het script is verwijderd.
SanThe.
SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Mir
*zucht*
Ging wel gevonden hebben waar ik moest aanpassen hoor, SanThe xP
Paradox™ schreef op 06.10.2008 00:30:
Waarom verwijderd?
Ging wel gevonden hebben waar ik moest aanpassen hoor, SanThe xP
Ging wel gevonden hebben waar ik moest aanpassen hoor, SanThe xP
Uit de regels:
Quote:
Plaats geen hele scripts, maar snippets ter ondersteuning van je vraag. Ga er niet van uit dat leden scripts van meer dan 30 regels gaan lezen.
Ik weet dat dit niet altijd de oplossing geeft, maar dit waren bijna 800 regels en dat is echt heel erg veel om te posten. Ik doe mijn best om tolerant te zijn. Maar ik hoop dat je mij ook een beetje begrijpt.
SanThe.
Misschien dat de TS jou het complete script kan/mag toesturen? Uiteraard zie ik het probleem ook graag opgelost.
Paradox, zou je me per mail of pm willen helpen dan?
Tis echt een groot probleem, en straks ligt mn site een beetje om zeep.. :(
Code (php)
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
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
<?php
session_start();
header("content-type: image/png");
$image = ImageCreate(120, 30); //Plaatje aanmaken met X=75 en Y=50
//We maken een achtergrondkleur
//$achtergrond = ImageColorAllocate($image, 255, 255, 255); //255, 255, 255 = Wit
$achtergrond = ImageColorAllocate($image, 0, 0, 0); //255, 255, 255 = Zwart
//De grootte van ons lettertype
$grootte = 14;
//Tekst die we op ons plaatje willen.
$eerste=rand(1,15);
$tweede=rand(1,15);
$tekst=$eerste. ' + '.$tweede. ' =: ';
$antwoord=$eerste + $tweede;
$_SESSION["string"] = $antwoord;
//Tekstkleur
$kleur = ImageColorAllocate($image, 255, 0, 0); //255, 0, 0 = Rood
//De functie ImageString word onder het voorbeeld uitgelegd !
ImageString($image, $grootte, 4, 7, $tekst, $kleur);
//Het plaatje aanmaken.
ImagePng($image);
//Het plaatje verwijderen uit het geheugen
ImageDestroy($image);
?>
session_start();
header("content-type: image/png");
$image = ImageCreate(120, 30); //Plaatje aanmaken met X=75 en Y=50
//We maken een achtergrondkleur
//$achtergrond = ImageColorAllocate($image, 255, 255, 255); //255, 255, 255 = Wit
$achtergrond = ImageColorAllocate($image, 0, 0, 0); //255, 255, 255 = Zwart
//De grootte van ons lettertype
$grootte = 14;
//Tekst die we op ons plaatje willen.
$eerste=rand(1,15);
$tweede=rand(1,15);
$tekst=$eerste. ' + '.$tweede. ' =: ';
$antwoord=$eerste + $tweede;
$_SESSION["string"] = $antwoord;
//Tekstkleur
$kleur = ImageColorAllocate($image, 255, 0, 0); //255, 0, 0 = Rood
//De functie ImageString word onder het voorbeeld uitgelegd !
ImageString($image, $grootte, 4, 7, $tekst, $kleur);
//Het plaatje aanmaken.
ImagePng($image);
//Het plaatje verwijderen uit het geheugen
ImageDestroy($image);
?>
Het gaat hie rom het uitreken van een som (nooit eerder gezien, zelf bedacht :D)
voorbeeld:
http://www.corinja.com/index.php?page=gastenboek
mvg Joost.
Edit:
Ik dacht dat ik 'm met md5 had gecodeerd :P kan je zelf ntrlijk ook doen : SESSION["string"] = md5($antwoord);
Ik dacht dat ik 'm met md5 had gecodeerd :P kan je zelf ntrlijk ook doen : SESSION["string"] = md5($antwoord);
Gewijzigd op 01/01/1970 01:00:00 door /home/joost