Captcha voor gastenboek

Status
Niet open voor verdere reacties.

hfoppen

Terugkerende gebruiker
Lid geworden
15 nov 2000
Berichten
1.058
Beste mensen,

i.v.m. de vele hoeveelheid SPAM wil ik mijn huidige gastenboek (al tijdje geleden gemaakt ;)) beveiligen. Dit lukt echter niet!!!

captcha.php
PHP:
<?php
// het random nr. aanmaken en gecodeerd opslaan in php sessie
 
session_start();
 
$randomnr = rand(1000, 9999);
$_SESSION['randomnr2'] = md5($randomnr);
 
// captcha plaatje met nummer maken - afmetingen kun je aanpassen gebruikte font
 
$im = imagecreatetruecolor(100, 38);
 
// Kleurenbepaling
 
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
 
// zwarte rechthoek tekenen - afmetingen kun je aanpassen aan verschillende fonts
 
imagefilledrectangle($im, 0, 0, 200, 35, $black);
 
// hier - font.ttf' vervangen met de locatie van je eigen font bestand
$font = 'font.ttf';
 
// schaduw toevoegen
 
imagettftext($im, 35, 0, 22, 24, $grey, $font, $randomnr);
 
// randomnr. toevoegen
 
imagettftext($im, 35, 0, 15, 26, $white, $font, $randomnr);
 
// voorkomen dat afbeelding ge-cached wordt
 
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
 
// plaatje verzenden naar browser
 
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>

ind_gboek.php
PHP:
<?php
	session_start(); 
	ob_start();  
?>

<html>
<head>
<title>  ..:: Roemeniereis 2009 - Gastenboek ::..</title>
</title>

<body>
<?php
	include("inc/connection.inc.php");
?>

<base target="_self">


<style type="text/css">
<!--
body,td,th {
	color: #CC0033;
	font-family: Tahoma;
}
body {
	background-color: #66CCFF;
}
-->
</style><body style="background-color: #66CCFF">
<?php
$message = '';
$_GET = $HTTP_GET_VARS; 
$_POST = $HTTP_POST_VARS; 

if (array_key_exists('name', $_POST) && array_key_exists('message', $_POST)) {
    // save the message :-)

    // Alles Controleren Wanneer er op Verzenden wordt gedrukt  
    if(isset($_POST['verzenden']))  
    {          
		if (md5($norobot) == $_SESSION['randomnr2']) { 
            $fout .= "U heeft de code incorrect over getypt! <BR>";  
            unset($norobot);  
            $fout_vakje_norobot = "input_fout";  
            $fout_text_norobot = "text_fout"; 
    }
    }
	if(!empty($fout))  
    {  
        echo "<center><font color=\"#FF0000\"> $fout </font><br>"; // Weergeven van de fout(en)  
    }  
    else  
	{
    $sql = 'INSERT INTO gastenboek(name,message,IP_address,time) VALUES (\''.$_POST['name'].'\', \''.nl2br(htmlspecialchars($_POST['message'])).'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.date('Y-m-d H:i:s').'\')';

    $query = mysql_query($sql); // update

    }		//toegevoegd 30/07

    if (mysql_errno() == 0) {

	// no error :)

	$message = 'Uw bericht is opgeslagen!';

    } else {

	// error :(

	echo 'helaas, er is een fout opgetreden: <br><br>'.mysql_error().'<br><br>Ik ben hier niet van op de hoogte, dus stuur me even een mailtje en kopieer de foutmelding even: <a href="herbert@foppen.nu?subject=foutmelding">herbert@foppen.nu</a>.';

	exit;

    }

    

}

echo '<html>

<link rel="stylesheet" href="stylesheet.css">

<head>

<title>  ..:: Roemeniereis 2009 - Gastenboek ::..</title>

</head>

<body style="background-color: #FBFFDF">

';



if ($message != '') {

    echo '<b>'.$message.'</b><br><br>';

}



echo '

<br><br>

<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
<tr><td height="100" width="100%" class="code" valign="top">
<b>Hier dan het gastenboek. Laat even een berichtje achter, en lees wat anderen al eerder hebben achtergelaten.<P>
<br>
Let op: er word informatie bewaard waarmee jou computer te herkennen is,
dit om te voorkomen dat mensen vervelend gaan doen op dit gastenboek (nu
kan de toegang geweigerd worden). Deze informatie word niet verkocht aan
derden!!
<P>

<form method="post" action="ind_gboek.php">
<table width="100%" height="196" cellpadding="5" cellspacing="0" border="0">
<tr>
	<td width="1%">Naam:</td>
	<td><input type="text" name="name" class="text" maxlength="25" size="20"></td>
</tr>	
<tr>
	<td width="1%">Berichtje:</td>
	<td><textarea name="message" cols="75" rows="10"></textarea></td>
</tr>
<tr>
	<td width=1%">Code:</td>
	<td><input class="input" type="text" name="norobot"></td>
	<td><img src="captcha.php"></td>
</tr> 
</table>

<input type="submit" class="button" value="Verstuur">
</form>
<P class="header">Berichtjes:</P>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr><td align="center">
';

// display messages
$sql = 'SELECT * FROM gastenboek ORDER BY time DESC';
$result = mysql_query($sql);

if (mysql_errno() != 0) {
    echo mysql_error();
    exit;
}

while ($row = mysql_fetch_array($result)) {
    echo '<table width="90%" cellpadding="2" cellspacing="0" border="0" class="message">

<tr><td class="left"><b>'.$row['name'].'</b></td><td width="1%" NOWRAP class="right"><b>'.$row['time'].'</b></td></tr>

<tr><td colspan="2">'.$row['message'].'</td></tr>

</table><br>';

}

?>
	</td></tr>
	</table>
</td></tr>
</table>

</body>
</html>

Ik stuit tegen 2 problemen:
1) De captcha is te groot en kan dus niet goed worden gelezen
2) De controle of code juist is overgenomen gat niet goed
 
Mag ik vragen waarom je niet gewoon een controlevraag stelt?

Bv. "Wat is dit?" gevolgd door een plaatje van een boom, met dan een formulier waar de gasten het antwoord in moeten schrijven. Dan kan je met een heel simpel php script controleren of het correct is ingevuld en zo ja, je gastenboekscript door laten gaan.
Volgens mij houdt dit evengoed spam tegen als captcha.
 
@Frenske123: Krijg het niet voor elkaar....lijkt zo simpel, maar wl het ws. te snel doen.
@tv woofing: zou een optie kunnen zijn, maar een captcha leek mij makkelijker...
 
"Krijg het niet voor elkaar....lijkt zo simpel, maar wl het ws. te snel doen."

Mischien eens eerst proberen met wat "kale " formuliertjes


Ik ben zelf niet zo een goede php_er , maar dit viel wel mee.

Tenzij je dit perse wilt houden , staan er op het www nog wel wat gastenboeken met goede beveiliging .
 

Tenzij je dit perse wilt houden , staan er op het www nog wel wat gastenboeken met goede beveiliging .


heb al ff zitten zoeken, maar niet zo 123 iets gevonden. Dus als je leuk script hebt :P
 
Er is nog altijd de ultra-easy oplossing :)

Voeg gewoon een extra veld toe, cloak het met CSS (display: none) en check of het ingevuld is. Zo ja, dan is het niet door een gebruiker met een browser gedaan, want die kan het niet invullen; dus is het spam.
 
Er is nog altijd de ultra-easy oplossing :)

Voeg gewoon een extra veld toe, cloak het met CSS (display: none) en check of het ingevuld is. Zo ja, dan is het niet door een gebruiker met een browser gedaan, want die kan het niet invullen; dus is het spam.

Tnx voor de tip! Klinkt idd wel logisch :)

'k Heb inmiddels de link van Frenske123 gevolgd en geinstalleerd en die draait nu ook perfect! Inderdaad met behoorlijk wat opties en een handige admin!

Toppie :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan