home  :: Home/Artikels/Webdesign enzo/Webdevelopment en scripting/PHP GD CAPTCHA als anti spam in guestbook, forum of mailform

PHP GD CAPTCHA als anti spam in guestbook, forum of mailform

Pagina 1 van 2
 1 |2| volgende»
door: Joriso 
spam

Online Gastenboek / forum software, e-mail formulieren etc. zijn met scripting talen als PHP of ASP simpel op te zetten. Ze neigen echter spammers aan te trekken als vliegen. Met dit simpele PHP / GD library Captcha script kun je vlug een eind aan de spam maken.

Spam

Spammers en spambots scannen websites allang niet meer alleen af op e-mail adressen. Een gewilde prooi zijn ook HTML-formulieren die e-mail verzenden, of een online forum of gastenboek van inhoud voorzien.

Nadat een mogelijkheid tot exploitatie ontdekt wordt, wordt door spammers of spambots een script geïmplementeerd dat enkele malen per dag het getroffen html formulier op je website bezoekt en automatisch submit.

Zonder anti spam maatregelen kunnen html formulieren automatisch periodiek worden misbruikt om reclameboodschappen te e-mailen of te injecteren in online fora of gastenboeken.

Gastenboek spam op je website staat niet leuk. Onbeveiligde mail formulieren die spammers misbruiken om via jouw website massaal spam te e-mailen zijn een nog minder prettig idee. Soms zie je online gastenboeken of fora ten onder gaan aan spam. Tijd om de spam een halt toe te roepen met CAPTCHA!

Captcha

captcha
Captain Captcha

De kracht van spambots / spam scripts is dat ze na initiatie automatisch een aantal maal per dag voorgeprogrammeerde handelingen verrichten om spam te verspreiden. Dit is tegelijk ook een zwaktepunt. Spambots kunnen zich niet zelfstandig aanpassen aan veranderende omstandigheden.

Er zijn verschillende anti-spam methodes ontwikkeld om het online gastenboek, forum en mail formulier te beschermen tegen spam. Grote gemene deler is dat zij allen proberen de menselijke bezoekers te onderscheiden van de computers die de webpagina bezoeken.

De anti spam methodes die je vindt in fora en gastenboeken worden daarom vaak gecategoriseerd als Captcha-scripts. CAPTCHA staat voor: 'Completely Automated Public Turing Test to Tell Computers and Humans Apart'. De Turing test werd in 1950 in een artikel van Alan M. Turing geconceptualiseerd als een test op in hoeverre kunstmatige intelligentie te onderscheiden was van menselijke intelligentie.

In het hier behandelde anti-spam voorbeeld zorgt het captcha script ervoor dat de ingevoerde tekst alleen verzonden wordt naar forum, gastenboek of mail formulier, wanneer de bezoeker een probleem (captcha) oplost dat voor een spam script of spambot onoverkomelijk is.

Spambots zijn net als zoekmachines over het algemeen niet in staat in plaatjes verwerkte tekst of cijfers te lezen. Daarom wordt in dit captcha voorbeeld de bezoeker gevraagd een willekeurig gegenereerd getal uit een plaatje in te typen.

Er bestaan spambots die (d.m.v. OCR software) wel in staat zijn text of cijfers op plaatjes te lezen. Daarom wordt bij captcha meestal gekozen voor beeldmanipulaties en/of moeilijk leesbare lettertypen die het schrift nog minder herkenbaar maken.

De captcha in dit voorbeeld doet dit door een schaduw toe te voegen aan de afbeelding. Er zijn met GD library talloze andere beeldmanipulaties mogelijk die spambots om de tuin kunnen leiden. Een overzicht van de GD Library functies die je met PHP kunt gebruiken vindt je op php.net. Bijvoorbeeld de PHP imagefilter() functie is voor CAPTCHA interessant.

Op de volgende pagina vindt je de volledige PHP code voor een werkende CAPTCHA die je in een willekeurig HTML formulier kunt plaatsen.

Pagina 1 van 2
 1 |2| volgende»



Commentaar van bezoekers:
van: eric
17:40:15, 5th-Feb-07
k Heb een vraagje, 'k ben niet zo goed met php maar ben er wel al in geslaagd om de captcha zichtbaar te krijgen op een bestaand php gastenboek. Nu snap ik niet goed welke php ik moet toevoegen in de test om te maken dat de berichten ook effectief zichtbaar worden en dus opgeslagen worden in mijn mysql database. heeft iemand daar een voorbeeld van, van hoe die testpagina er dan uitziet als ze volledig werkt?

van: Ruud
17:54:31, 22nd-Mar-07
ruud

van: rene
15:34:21, 28th-Mar-07
okee

van: Ria
19:46:13, 28th-Mar-07
Dit werkt perfect

van: lieke
14:08:13, 18th-Apr-07
hoe kun je een captcha toevoegen in ASP?

van: Sinterklaas
20:34:10, 21st-Apr-07
Wikipedia is gehakt en gewist!!!!!!

van: Ruud
17:40:44, 1st-May-07
Dit was ik aan het zoeken! Bedankt!

van: holiday cottages
17:20:59, 11th-Jul-07
In Betracht des Zahlwachsens von Spam, das ich innen empfange Anmerkungen zum Aufstellungsort in diesem Moment (manchmal mehr als 150-200 pro Tag), traf ich die Entscheidung, um ein captcha Anti-spam in Form von Hinzufügung der Anmerkung Geschichte hinzuzufügen, um diesen Fluß zu stoppen wenig… Ich beseitigte bis jetzt diese…

van: test
11:21:24, 2nd-Aug-07
proberen

van: Vincent
23:17:22, 13th-Aug-07
Ha, echt een geweldige oplossing, maar hoe kan ik nu de captcha laten controleren op juistheid na het versturen?
Ik krijg het write.php niet geintergreerd in mijn gb.php.

Ik ben een echte beginner, dus graag heel concreet....

dit is mijn code:

<?

$amount=15;

if ($_GET['action']=='write') {
header('location: gb.php?action=read&start=0');
$file=fopen('gastenboek.txt','a');

$message=str_replace("r",'',$message);
$message=str_replace("n",'{{',$_GET['message']);
fwrite($file,$_GET['name'].'|||'.$_GET['email'].'|||'.date('d-m-Y').'|||'.$_GET['url'].'|||'.$message."n");
fclose($file);

}

$start=(isset($_GET['start'])?$_GET['start']:0);
$gastenboek=Array();
$gastenboek=file('gastenboek.txt');
?>
<link href="stylesheet/page.css" rel="stylesheet" type="text/css">
<SCRIPT language="JavaScript">
function validate(form) {
if (form.name.value=="") {
alert("Vul je naam in");
return false;
} else if (form.message.value=="") {
alert("Vul je bericht in");
return false;
} else if (form.norobots.value=="") {
alert("Vul de goede cijfercode in");
return false;
}
}
</SCRIPT>

<P>
<TABLE width="100%" cellspacing="0" cellpadding="0" >
<tr>
<td width="8">&nbsp</td>
<td>
<TABLE width="100%" cellspacing="0" cellpadding="0" >
<TR>
<TD><br><b>Gastenboek</b><br></TD>
</TR>
</TABLE>
<TABLE width="100%" cellspacing="0" cellpadding="0">
<TR>
<TD> Berichten <? echo $start+1; ?> tot en met <? echo min($start+$amount,sizeof($gastenboek)); ?>.
<HR> <TABLE width="100%" >
<?
$gastenboek=array_reverse($gastenboek);
for ($i=$start;$i<$start+$amount && $i<sizeof($gastenboek);$i++) {
list($name,$email,$date,$url,$message)=explode('|||',$gastenboek[$i]);
$message=str_replace('{{',"n",$message);
echo '<TR><TD><B>'.($email!=""?'<A href="mailto:'.$email.'">'.$name.'</A>':$name).'</B></TD><TD align="right"><B>'.$date.'</B></TD></TR>'."n";
echo ($url!=""?'<TR><TD colspan="2"><A href="'.$url.'" target="_blank">'.$url.'</A></TD></TR>':'')."n";
echo '<TR><TD colspan="2"><SPAN>'.str_replace("n",'<BR>',htmlspecialchars($message)).'</SPAN></TD></TR>'."n";
echo '<TR><TD colspan="2"><HR></TD></TR>'."n";
}
?>
</TABLE>
<CENTER>
<?
if ($start>0) echo '<A href="gb.php?start='.max(0,$start-$amount).'"><<<</A> ';
if ($start+$amount<sizeof($gastenboek)) echo ' <A href="gb.php?start='.($start+$amount).'">>>></A>';
?> </CENTER></TD>
</TR>
</TABLE>
<P>
<TABLE width="100%" cellspacing="0" cellpadding="0" >
<TR>
<TD>Nieuw bericht</TD>
</TR>
</TABLE>
<TABLE width="100%" cellspacing="0" cellpadding="0" >
<TR>
<TD> <FORM action="gb.php" method="GET" onSubmit="return validate(this);">
<INPUT type="hidden" name="action" value="write">
<TABLE class="side">
<TR>
<TD>Naam:</TD>
<TD><INPUT type="text" name="name" size="30"></TD>
</TR>
<TR>
<TD>E-Mail:</TD>
<TD><INPUT type="text" name="email" size="30">
(optioneel)</TD>
</TR>
<TR>
<TD>Homepage:</TD>
<TD><INPUT name="url" type="text" size="30">
(optioneel)</TD>
</TR>
<TR>
<TD>Bericht:</TD>
<TD><TEXTAREA name="message" cols="50" rows="5"></TEXTAREA></TD>
</tr>
<tr><td>Code ==>>:</td><td>
<input class="input" type="text" name="norobots"><img src="captcha/captcha.php" height="30"></td> </TR>
</TABLE><INPUT type="submit" value="Verstuur"></td>
</FORM></TD>
</TR>
</TABLE>
<i>De beheerder heeft het recht berichten te weigeren en/of te verwijderen.</i>



=================
Mocht iemand nog meer verbeteringen hebben, hoor ik het graag... (ik blijf wel het liefste bij een txt file met de berichten erin....


van: Tester
16:55:41, 21st-Aug-07
Weet je waar ik mee zit?
Als je terug in je geschiedenis gaat krijg je weer dezelfde code te zien,
moet er dan niet een nieuwe code worden gegenereerd?

van: Tester
16:58:43, 21st-Aug-07
Alleenop deze pagina blijkt mijn history gewist te zijn (back-knop)
Bij deze meneer http://www.ffazie.nl/NL/NL_subpaginas/NL_email.html
was het ook zo ligt het aan mij of is er iets met het scipt.

van: Tester
17:01:53, 21st-Aug-07
Ik weet het niet hoor maar volgens mi j gebruikt de schrijver een iets andere versie van het script voor zijn eigen site. Dus voor dit voorbeeld, eff testen .

van: Tester
17:07:50, 21st-Aug-07
Het is waar , na dat je je commentaar hebt gegeven de code invult en dan op toevoegen klikt, herlaadt de pagina zich met het nieuwe commentaar en eveneens een nieuwe code, Tevens is de voorgaande pagina niet meer met de backttoets in het history op te vragen. Doe ik iets fout met mijn script of is het inderdaad een ietsie pietsie ander script dat hij zelf gebruikt ???

van: joriso
20:43:32, 21st-Aug-07

Ik gebruik hetzelfde script, en gebruik bij succesvolle captcha de header() php functie om bezoeker door te sturen naar een nieuwe pagina zonder dat de history vd browser wordt aangepast. Zie http://php.net/manual/en/function.header.php

van: Tester
23:35:17, 4th-Sep-07
This gelukt het as inderdaad de header thanks.
Alleen ik kan niet de functie gebruiken die jij gebruikt.
imagettftext() i.p.h.v. gbruik ik imagestring();
om een of andere reden pakt hij die functie niet bij mij

Dankje voor je aanwijzingen

van: BeZo
15:04:49, 26th-Sep-07
Werkt prima, heel mooi bedankt!!!

van: Flexxcom
16:25:37, 11th-Nov-07
In 99% van de gevallen gebruikt de spam bot het formuliertje niet eens, maar stuurt ie de info direct naar het bericht-verwerkings-script.

Dus is het in 99% van de gevallen voldoende om bij het formuliertje een sessie te maken, en dan bij het script die het bericht verwerkt te kijken of de sessie bestaat.
Zo niet, sla het bericht niet op.

van: Tom
15:36:45, 7th-Dec-07
werkt prima ! thx

van: Donnows
12:24:25, 4th-Mar-08
dit zoek ik dus net

van: fritz
12:41:23, 25th-May-08
werkt prima voor mij! super

van: jan
21:43:55, 24th-Jun-08
test

van: Anton
22:29:00, 8th-Jul-08
Ik gebruik het script nu op mijn website

van: Stefan
22:49:17, 18th-Nov-08
Dit was wat ik zocht

van: Jelle
16:45:58, 19th-Feb-09
Hallo,
Ik heb een heel ander probleem. In mijn forum zit een captcha ingebouwd, maar ik wordt doodgegooid met aanmeldingen. Ze komen gelukkig niet verder omdat ik handmatig goedkeuring moet verlenen. Maar vervelend is het wel. En bijna allemaal Spammers troep uit china of via Gmail.com
Wie heeft hier meer ervaring mee.
Jelle

van: Els
18:37:08, 2nd-Mar-09
testje

van: martinn
13:17:08, 15th-Mar-09
mooie code maar warr vind ik font.tff :- )

van: pierre
12:56:49, 18th-Apr-09
de site is in ontwikkeling en momenteel op zondag's bereikbaar.

en het captcha script getest werkt feilloos nu nog in de index file plaatsen mni tnx
aan de ontwikkelaar hiervan.

van: qwe
23:50:47, 4th-Aug-09
ert e twer twret

van: Nigel
10:00:24, 15th-Sep-09
vraagje kun je ook een jpeg afbeelding als achtergrond zetten bij de captcha, een watermerk logo bijvoorbeeld ?

van: Puppy Videos
20:23:41, 29th-Jan-10
Ik heb het op mijn site toegepast en het werkt Prima

van: Klaus Disney
11:46:37, 19th-May-10
Donald Duck: Lucky Number 1951
Donald Duck: Trick or Treat 1952
Donald Duck: Don's Fountain of Youth 1953
Donald Duck: Canvas Back Duck 1953
Donald Duck: Spare the Rod 1954
Donald Duck: Donald's Diary 1954

Commentaar toevoegen:
Naam:
Link:(niet verplicht)
Commentaar:
<-- code:
  

Pagina's in dit artikel:
pagina 1
PHP GD CAPTCHA als anti spam in guestbook, forum of mailform



Gerelateerde Artikels :
webdevelopment:
PHP GD CAPTCHA als anti spam in guestbook, forum of mailform

Snel zoeken:



Sterke man
50 Euro

Toevallig
passerende
cartoon
:



Nieuwste links:


All content copyleft 2008 Joris Osterhaus - www.hardcode.nl