Vraag & Antwoord

Webprogrammeren & scripting

captcha zonder cookie?

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>\n"; } $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

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

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