gastenboek met captcha geeft aan code niet juist

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Thomas de vries

thomas de vries

19/04/2011 21:01:53
Quote Anchor link
Goedenavond,

Ik heb een probleempje waar ik zo niet uit kom.
Ik heb een gastenboek gemaakt en van het internet een captcha code gehaald,
deze heb ik in mijn script verwerkt maar als ik de code invul dan blijft
mijn script zeggen dat de code niet juist is.

misschien iemand hier een idee.

dit is de image(captcha) code
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
<?php
// -----------------------------------------
//  The Web Help .com
// -----------------------------------------


header('Content-type: image/jpeg');

$width = 50;
$height = 24;

$my_image = imagecreatetruecolor($width, $height);

imagefill($my_image, 0, 0, 0xFFFFFF);

// add noise
for ($c = 0; $c < 40; $c++){
    $x = rand(0,$width-1);
    $y = rand(0,$height-1);
    imagesetpixel($my_image, $x, $y, 0x000000);
    }


$x = rand(1,10);
$y = rand(1,10);

$rand_string = rand(1000,9999);
imagestring($my_image, 5, $x, $y, $rand_string, 0x000000);

setcookie('tntcon',(md5($rand_string).'a4xn'));

imagejpeg($my_image);
imagedestroy($my_image);
?>


dit is mijn gastenboek
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
65
66
67
68
69
70
71
72
73
74
<div id="gastenboek">
<h1>Gastenboek</h1>
Wij van het apolloteam zouden het leuk vinden als u een berichtje achterlaat.
<form method="post" action="">
<table width="100%">
<tr>
    <td width="15%" style="border:none;">Naam:</td>
    <td style="border:none;"><input type="text" name="naam" /></td>
</tr>
<tr>
    <td style="border:none;">Email:</td>
    <td style="border:none;"><input type="text" name="email" /></td>
</tr>
<tr>
    <td style="border:none;">Bericht:</td>
    <td style="border:none;"><textarea cols="50" rows="10" name="bericht"></textarea></td>
</tr>
<tr>
    <td style="border:none;">Verificatie code</td>
    <td style="border:none;"><input type="text" name="verificatie" align="top" />&nbsp;<img src="../includes/captcha.php?<?php echo rand(0,9999);?>" alt="verificatie code" width="50" height="24" align="top" /></td>
</tr>
<tr>
    <td style="border:none;"><input type="submit" name="gastenboek" value="Verstuur" /></td>
</tr>
</table>
</form>
<?php echo '<font color="red">'.$fout.'</font>'; ?>
</div>

<div id="berichten">
<?php
$sql_gastenboek
= "SELECT naam,bericht,datum,email, DATE_FORMAT(datum, '%d-%m-%Y %H:%i') AS datum FROM gastenboek ORDER BY datum DESC LIMIT 10";
if(!$result = $mysqli->query($sql_gastenboek))
{

    echo "Er is een fout opgetreden onze excusus voor het ongemak!";    
}

else
{
    $count = $result->num_rows;
    if($count < 1)
    {

        echo "er zijn nog geen berichten";    
    }

    else
    {
        while($row = $result->fetch_assoc())
        {

            echo '
            <div id="titel">
            <table width="100%">
            <tr>
                <td style="border:none;">Datum:</td>
                <td style="border:none; width:150px;">'
.$row['datum'].'</td>
                <td style="border:none;">Door:</td>
                <td style="border:none; width:100px;">'
.$row['naam'].'</td>
                <td style="border:none;">Email:</td>
                <td style="border:none;">'
.$row['email'].'</td>
            </tr>
            </table>
            </div>
            <div id="bericht1">
            <table width="100%">
            <tr>
                <td width="15%" style="border:none;"><img src="images/01.png" alt="blaat" /></td>
                <td style="border:none;">'
.$row['bericht'].'</td>
            </tr>
            </table>
            </div><br />'
;
        }
    }
}

echo var_dump($_POST);
?>

</div>


En hier wordt het verwerkt en gecontroleerd.

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
<?php
//Controle gastenboek//
if($_SERVER['REQUEST_METHOD'] == "POST")
{

    if(isset($_POST['gastenboek']))
    {

        $naam = $mysqli->real_escape_string($_POST['naam']);
        $email = $mysqli->real_escape_string($_POST['email']);
        $bericht = $mysqli->real_escape_string($_POST['bericht']);
        $code = $_POST['verificatie'];
    
        if($naam == "")
        {
    $fout = "U heeft geen naam opgegeven!";    }
        elseif ($email == "")
        {
    $fout = "U heeft geen email opgegeven!";    }
        elseif ($bericht == "")
        {
    $fout = "U hebt geen bericht ingetypt!";    }
        elseif ($checkmail == checkmail($email))
        {
    $fout = "Uw mail adress is niet goed!";    }
        else
        {
            if(md5($code).'a4xn' == $_COOKIE['tntcon'])
            {

                //als verificatie goed is gegaan dan posten.
                $sql = "INSERT INTO gastenboek (id,naam,email,ip_adrr,bericht,datum) VALUE (NULL,'".$naam."','".$email."','".$ipadress."','".$bericht."',NOW())";
                if(!$result = $mysqli->query($sql))
                {

                    sqlError('Er is een fout gevonden bij het verwerken van de data.<br />Onze excuses voor het ongemak.<br />De beheerder is op de hoogte gesteld.');
                    notify('Probleem met de query:'.$mysqli->error.' in control.php op lijn 51 op datum '.date("Y-m-d").'');    
                }

                else
                {
                    $fout = "Bericht is verstuurd";    
                }

                //Cookie verwijderen zodat er niet op f5 kan worden gedrukt.
                setcookie('tntcon','');    
            }

            else
            {
                $fout = "De ingevulde code kwam niet overeen";     
            }
        }
    }
}

?>


Alvast bedankt.
Tips voor het verbeteren heb ik wat aan.
Geen afkraak gedoe want dat kunnen we allemaal.

Met vriendelijke groet,

Thomas de Vries.
Gewijzigd op 19/04/2011 21:02:33 door Thomas de vries
 
PHP hulp

PHP hulp

05/11/2024 12:30:03
 
Noppes Homeland

Noppes Homeland

19/04/2011 21:14:56
Quote Anchor link
1. je controles en validaties zijn niet goed genoeg
2. gebruik geen cookies maar session
3. ik heb een hekel aan mensen die overbodige variabelen aanmaken
4. zorg er voor dat: de "image(captcha) code" correct functioneerd
5. zorg er voor dat je debug modes hebt aanstaan
6. leer op correcte manier consequent quoten
 
Thomas de vries

thomas de vries

19/04/2011 21:20:01
Quote Anchor link
bedankt voor je reactie.
een paar punten snap ik goed.
dat is punt 3 en punt 2
punt 3 is toch naar ieders eigen mening. ik ben de scripter en ik bepaal uiteindelijk hoe het eruit komt te zien.
maar punt 1 volg ik niet hoe kan ik het nog beter valideren/controleren.
ik heb alle mogelijke sql injections geprobeerd die ik ken. en ik kan de db niet in komen op die manier.

punt 6 snap ik ook niet helemaal. wat je daarmee bedoelt.(denk de uitleg wat ik erbij heb).

de captcha code functioneert wel op de site zelf misschien iets misgegaan met kopieren zal er nog eens dieper in gaan kijken.
Gewijzigd op 19/04/2011 21:22:14 door thomas de vries
 
Noppes Homeland

Noppes Homeland

19/04/2011 21:34:57
Quote Anchor link
Quote:
punt 3 is toch naar ieders eigen mening. ik ben de scripter en ik bepaal uiteindelijk hoe het eruit komt te zien.

Welk nut heeft het om "1000" variabelen te hebben met dezelfde inhoud, daar gaat het om!

Quote:
punt 6 snap ik ook niet helemaal. wat je daarmee bedoelt.(denk de uitleg wat ik erbij heb).

alle strings quoten met enkele quote, dat dwingt je dan wel om php variabelen buiten de string te zetten, maar dat is wel zo overzichtelijk. Er zijn uiteraard uitzonderingen:
- SQL statements quote je met ""
- en de \r \n \t

Quote:
1

oh dus jij vindt dat isset met een == '' afdoende is

Quote:
2

http://www.php.net/cookie
En dan goed lezen wanneer een cookie nu daadwerkelijk als bekend beschouwd wordt
 
Thomas de vries

thomas de vries

20/04/2011 09:22:11
Quote Anchor link
Goedemorgen,

Ik heb het bijna opgelost.
maar kom nu tegen de volgende fout aan
als ik in mijn form dit doe
<form method="post" action="../includes/control.php">

Dan gaat ie na de submit naar die control heen dan werkt die captcha code wel.
Maar als ik action leeg laat dan blijft ie zeggen code is fout.

en dat terwijl ik mijn control wel include.
want daar moet ie controleren of alles goed gaat.
hoe kan ik dit oplossen.

met vriendelijke groet,

Thomas de vries.
 
- SanThe -

- SanThe -

20/04/2011 09:34:51
Quote Anchor link
Relevante code?
 
Thomas de vries

thomas de vries

20/04/2011 09:55:46
Quote Anchor link
@santhe
de relevante code is hierboven te vinden.
dat is alle relevante code.
 
- Ariën  -
Beheerder

- Ariën -

20/04/2011 09:58:25
Quote Anchor link
Je meot even debuggen wat de waardes uit je cookie zijn, en uit de MD5 hash.
 
Thomas de vries

thomas de vries

20/04/2011 10:01:21
Quote Anchor link
ke maar wat ik niet snap is dat als ik het zonder include doe
maar bij form action het bestand inplak waar die de controles moet uitvoeren het wel doet.

Dus de captcha doet het wel maar alleen als je dus de form action gebruikt.

BTW hoe doe je dat debuggen van de md5 hash dan.
Ik weet wat er in staat.
het gaat om een random getal tussen de 1000 en de 9999.
en er wordt a4xn achter geplakt.

Edit:
heb error reporting boven aan gezet.
en krijg deze melding
Notice: Undefined index: tntcon in F:\server\htdocs\apolloteam\pages\gastenboek.php on line 59

ik denk dat het daarmee te maken heeft.
maar dacht dat index alleen maar te maken heeft met variabelen en niet met cookie.
de regel is namelijk als volgt.

if(md5($_POST['verif_box']).'a4xn' == $_COOKIE['tntcon'])

Toevoeging op 20/04/2011 10:30:29:

ik ben er uit hij zet de cookie niet.
wel vreemd maar zal is kijken hoe dat komt.

Toevoeging op 20/04/2011 11:22:10:

Edit 2:

Problemen zijn nu opgelost
pfff wat een gedoe.
had iets niet goed met de includes.
Gewijzigd op 20/04/2011 10:18:20 door thomas de vries
 
Rotu Rotu

Rotu Rotu

20/04/2011 11:54:04
Quote Anchor link
$_COOKIE['tntcon'] hoeft niet te bestaan
Sterker: Wanneer de gebruiker geen cookies accepteerd van je site zal die niet bestaan en zal PHP een error geven zoals je al zei.

Gebruik daarom ipv $_COOKIE $_SESSION['tntcon'] zoals hierboven al was gezegd. Dit doe je door boven elk script waarin de variable $_SESSION['tntcon'] wordt gebruikt de sessie te starten mbv session_start();

Waardes in $_SESSION['tntcon'] zetten gaat alsvolgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$_SESSION
['tntcon'] = 'een waarde';

?>


Bij het uitlezen van variables die je uit een ander script haalt zoals $_GET, $_POST, $_SESSION en $_COOKIE zou ik altijd controlleren of ze echt bestaan dmv isset($_SESSION['tntcon']) toe te voegen aan je bestaande controlles.

Succes!
 



Overzicht Reageren

 
 

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.