Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

captcha zonder cookie?

None
6 antwoorden
  • Hallo allemaal,

    Ik zou graag mijn site zonder cookies willen. Maar nu gebruik ik een captcha bij het contact formulier is een cookie dan echt nodig?

    Groeten, Erwin
  • Waarom zou je überhaupt een cookie gebruiken? Om de oplossing in op te slaan ofzo? Dan is het heel eenvoudig te kraken.

    Als ik jou was zou ik in de sessie een identifier zetten voor de betreffende CAPTCHA en die in de database matchen met de oplossing. Meer heb je niet nodig.

    Terzijde: hou er rekening mee dat veel CAPTCHA's tegenwoordig gemakkelijker op te lossen zijn door spambots dan door mensen. Verwacht er dus niet teveel van; zodra je site bekend wordt en spambots krijgen interesse in je, dan zal de CAPTCHA niet veel meer tegenhouden.
  • Sorry voor de late reactie..

    Mijn PHP kennis is te weinig om je oplosing te gebruiken. Sterker nog ik weet niet eens wat een identifier is :o

    Ik gebruik een bestaand contact script wat ik een beetje heb aangepast, alles werkt perfect maar ik kwam via een validatie site er achter dat het cookies gebruikt..

    Ik vroeg me meer af of er een bepaalde "code" is die een cookie maakt, ik zie in het script niks wat het zou kunnen veroorzaken.

    Of is een session een cookie? :oops:
  • Laat die identifier maar even zitten dan. :)

    Een sessie en een cookie zijn twee verschillende dingen. Kun je misschien eens wat laten zien van het script dat je gebruikt? Dan kunnen we het eens goed bekijken en je beter advies geven.
  • Dit is het script: [code:1:f811dd2ab3]<?php

    session_start();

    ini_set( 'display_errors', true );
    error_reporting( E_ALL | E_STRICT );




    function checkmail($email)
    {
    if (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i", $email))
    {
    list($userName, $mailDomain) = split("@", $email);
    if (checkdnsrr($mailDomain, "MX")) {
    return TRUE;
    }
    }
    return FALSE;
    }

    $formulier = TRUE;

    if(isset($_POST['verzenden']) && ($_SERVER['REQUEST_METHOD'] == "POST"))
    {
    $aFout = array();

    $voornaam = trim($_POST['voornaam']);
    $achternaam = trim($_POST['achternaam']);
    $email = trim($_POST['email']);
    $onderwerp = trim($_POST['onderwerp']);
    $bericht = trim($_POST['bericht']);


    if(TRUE)
    {
    $code = $_POST['code'];
    }

    (||=of)(&&=AND).
    if(empty($voornaam) || (strlen($voornaam) < 2) || preg_match("[<>]", $voornaam) )
    {
    $aFout[] = "Er is geen voornaam ingevuld.";
    unset($voornaam);
    $fout['text']['voornaam'] = TRUE;
    $fout['input']['voornaam'] = TRUE;
    }


    if(empty($achternaam) || (strlen($achternaam) < 2) || preg_match("[<>]", $achternaam) )
    {
    $aFout[] = "Er is geen achternaam ingevuld.";
    unset($achternaam);
    $fout['text']['achternaam'] = TRUE;
    $fout['input']['achternaam'] = TRUE;
    }

    if(empty($email))
    {
    $aFout[] = "Er is geen e-mail adres ingevuld.";
    unset($email);
    $fout['text']['email'] = TRUE;
    $fout['input']['email'] = TRUE;
    }

    elseif(!filter_var($email, FILTER_VALIDATE_EMAIL))
    {
    $aFout[] = "Er is geen correct e-mail adres ingevuld.";
    unset($email);
    $fout['text']['email'] = TRUE;
    $fout['input']['email'] = TRUE;
    }
    if(empty($onderwerp))
    {
    $aFout[] = "Er is geen onderwerp ingevuld.";
    unset($onderwerp);
    $fout['text']['onderwerp'] = TRUE;
    $fout['input']['onderwerp'] = TRUE;
    }
    if(empty($bericht))
    {
    $aFout[] = "Er is geen bericht ingevuld.";
    unset($bericht);
    $fout['text']['bericht'] = TRUE;
    $fout['input']['bericht'] = TRUE;
    }
    if(TRUE)
    {
    if(strtoupper($code) != $_SESSION['captcha_code'])
    {
    $aFout[] = "Er is geen correcte code ingevuld.";
    $fout['text']['code'] = TRUE;
    $fout['input']['code'] = TRUE;
    }
    }
    if(!empty( $aFout ))
    {
    $errors = '
    <div id="errors">
    <ul>';
    foreach($aFout as $sFout)

    {
    $errors .= " <li>".$sFout."</li>
    ";
    }
    $errors .= "</ul>
    </div>";
    }
    else
    {
    $formulier = FALSE;


    if(TRUE)
    {[/code:1:f811dd2ab3]

    Hierna komen de formuliertjes voor de email en de invul velden. En als laatste de captcha deze code zal ik ook toevoegen:
    [code:1:f811dd2ab3]<?php


    session_start();

    if (phpversion () < "5"){ // define PHP5 functions if server uses PHP4

    function str_split($text, $split = 1)
    {
    if (!is_string($text)) return false;
    if (!is_numeric($split) && $split < 1) return false;
    $len = strlen($text);
    $array = array();
    $s = 0;
    $e=$split;
    while ($s <$len)
    {
    $e=($e <$len)?$e:$len;
    $array[] = substr($text, $s,$e);
    $s = $s+$e;
    }
    return $array;
    }
    }

    // Captcha keygenerator
    function keygen($aantal)
    {
    $tekens = array_merge(range('A', 'F'), array('H', 'J', 'K', 'M', 'N'), range('P', 'Z'));
    $randomstring = "";
    for($i=1; $i <= $aantal; $i++)
    {
    shuffle($tekens);
    $randomstring .= $tekens[0];
    }
    return $randomstring;
    }

    $random_code = keygen(4);
    $_SESSION['captcha_code'] = $random_code;

    $breedte = 90;
    $hoogte = 30;

    header("content-type: image/png");

    $afbeelding = imagecreate($breedte, $hoogte);
    $achtergrond = imagecolorallocate($afbeelding, 255, 255, 255);
    $font = "fonts/arial.ttf";

    $kleur = imagecolorallocate($afbeelding, 186, 197, 214);
    imagerectangle($afbeelding, 0, 0, $breedte-1, $hoogte-1, $kleur);

    $aantal_punten = rand(250, 500);

    for ($i = 0; $i < $aantal_punten; $i++)
    {
    imagesetpixel($afbeelding, rand(1, $breedte-1), rand(1, $hoogte-1), $kleur);
    }

    $aantal_lijnen = rand(5, 8);
    $aantal_cirkels = rand(5, 8);
    $aantal_lijnen2 = rand(2, 6);
    $spread = 100;

    for($i = 0; $i < $aantal_lijnen; $i++)
    {
    $y_begin = rand(-$spread, $hoogte + $spread);
    $y_eind = rand(-$spread, $hoogte + $spread);
    $kleur = imagecolorallocate($afbeelding, rand(170, 255), rand(170, 255), rand(170, 255));

    imageline($afbeelding, 0, $y_begin, $breedte, $y_eind, $kleur);
    }

    for($i = 0; $i < $aantal_cirkels; $i++)
    {
    $y_center = rand(1, $breedte-1);
    $x_center = rand(1, $hoogte-1);
    $kleur = imagecolorallocate($afbeelding, rand(170, 255), rand(170, 255), rand(170, 255));

    imageellipse($afbeelding, $y_center, $y_center, rand(50, 100), rand(50, 100), $kleur);
    }

    $tekst = str_split($random_code);

    for ($i = 0; $i < count($tekst); $i++)
    {
    $xas = rand(5, 15);
    $yas = rand(18, 25);
    $graden = rand(-25, 25);
    $grootte = rand(12,14);
    $kleur = imagecolorallocate($afbeelding, rand(0, 100), rand(0, 100), rand(0, 100));
    imagettftext($afbeelding, $grootte, $graden, $i * 20 + $xas, $yas, $kleur, $font, $tekst[$i]);
    }

    for($i = 0; $i < $aantal_lijnen2; $i++)
    {
    $y_begin = rand(-$spread, $hoogte + $spread);
    $y_eind = rand(-$spread, $hoogte + $spread);
    $kleur = imagecolorallocate($afbeelding, rand(170, 255), rand(170, 255), rand(170, 255));

    imageline($afbeelding, 0, $y_begin, $breedte, $y_eind, $kleur);
    }

    imagepng($afbeelding);
    imagedestroy($afbeelding);
    ?>[/code:1:f811dd2ab3]
  • Ik heb het niet helemaal uitgespit, maar ik zie daar nergens de functie setcookie() aangeroepen worden. Het enige wat je validator misschien zal zien is de cookie [i:554aa917bd]PHPSESSID[/i:554aa917bd], maar dat is iets wat bijhoudt welke sessie dat je hebt. Niet om je zorgen om te maken dus. :)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.