CAPTCHA
Auteur: b4nkr0bz0r - 21 juni 2007 - 09:45 - Gekeurd door: Ibrahim - Hits: 18272 - Aantal punten: 4.25 (2 stemmen)
Ik weet dat er duizenden zijn, toch post ik hier mijn variant, het werkt namelijk ook goed. Het gebruik is heel simpel, je slaat de code op in een php-bestand (image.php) include de file op je pagina waar je de controle wil uitvoeren, daarna controleer je met een if-loopje of de string (input) overeen komt met de gegenereerde code in de image.
Hoe is CAPTCHA ontstaan ?
Door een computer-test, er was een man die wilde kijken hoever je het verschil tussen een mensenlijke-intilligentie en een computer-intilligentie kon meten.
Wat doet zon script nou precies ?
Het aanmaken van een unieke code, en in een afbeelding zetten. We zetten de code in de afbeelding zodat de tekst niet geselecteerd kan worden en niet in de bron gevonden kan worden, zo verkomen we dat mensen de code niet kopieëren, en voor bots het moeilijker maken.
Volgens mij kan een bot zich altijd aanmelden, je kan het wel moeilijker maken door meerdere technieken te gebruiken in GD 1/2 zoals: delen van de string (tekst die op de image komt) op verschillende hoogtes zetten en verschillende graden meegeven.
Hoe goed werkt CAPTCHA nou ?
Er is onderzoek gedaan door verschillende organisaties (BREAKING, AICAPTCHA en PWNTCHA). Zij zeggen dat 88% een zeef is, vol met gaten.
Wat zijn bots precies, en waarom zijn ze er ?
Dit is heel simpel, bots moet je zien al geautomatiseerde bezoekers, die HTML-formulieren op sites bezoeken, en deze invullen met niet-bestaande informatie.
Hierbij moet je denken aan: gastenboeken, mogelijkheden tot reacties te plaatsten of registreren bij een site.
Als ze weten in wat voor een patroon de informatie gegeven moet worden zou de bot niet stoppen met je onschulldige gastenboekje vol te spammen met reclame.
Hoe kan een bot nou informatie uit een afbeelding halen?
Zodra de webmasters iets hebben uitgevonden om mensen/bots/wat dan ook ergens van te preventeren, zullen er ALTIJD mensen zijn die hun best gaan doen om daaraan te 'ontkomen' .
De zogehete software: 'optical character recognition' Ze kunnen dus de karakters herkennen in de afbeelding.
Hoe ziet een goede CAPTCHA eruit?
1. Gebruik verschillende fonts
2. Roteer elk karakter
3. Gebruik een achtergrond afbeelding, of een patroon. maar NOOIT één achtergrond kleur.
4. Probeer elk karakter op een andere positie te zetten.
|
Code: |
De code:
<?php
// Volle errorreporting...
error_reporting(E_ALL);
// Voor de sessie...
session_start();
// Kijken of GD geïnstalleerd en enabled is...
if (extension_loaded('gd') === false)
{
// We stoppen het script...
die ('Geen GD-libary geïnstalleerd.');
}
else
{
// Hier stoppen we alle letters en getallen in een string...
$sCode = implode(range('a', 'z'));
$sCode .= implode(range(0, 9));
// De eerste 6 tekens sellecteren van een string die random gemaakt is...
$sCode = substr(str_shuffle($sCode), 0, 6);
// De IMG zelf...
if ($image = imagecreatetruecolor(115, 25))
{
// De achtergrond kleur...
$fontcolor = imagecolorallocate ($image, rand(190, 255), rand(190, 255), rand(190, 255));
// Lusje maken...
for ($i = 0; $i < strlen($sCode); $i++)
{
// Ze zullen om-en-om in een negative of positieve rotatie staan...
$iRotation = ($i % 2 == 0) ? rand(-12, -6) : rand(6, 12);
$iMargin = ($i == 0) ? 14 : $i * 14 + 20;
// We gaan de text in de IMG zetten..
imagettftext($image, 11, $iRotation, $iMargin, rand(12, 22), $fontcolor, 'verdana.ttf', $sCode{$i});
}
// De waarde in een sessie zetten...
$_SESSION['captcha'] = $sCode;
// Headertje verzenden...
header('Content-type: image/png');
// De IMG weergeven...
imagepng ($image);
// Het is klaar...
imagedestroy ($image);
}
else
{
// Error weergeven...
die ('Het plaatje kon niet worden aangemaakt.');
}
}
?>
<?php // Volle errorreporting... // Voor de sessie... // Kijken of GD geïnstalleerd en enabled is... { // We stoppen het script... die ('Geen GD-libary geïnstalleerd.'); } else { // Hier stoppen we alle letters en getallen in een string... // De eerste 6 tekens sellecteren van een string die random gemaakt is... // De IMG zelf... if ($image = imagecreatetruecolor(115, 25)) { // De achtergrond kleur... $fontcolor = imagecolorallocate ($image, rand(190, 255), rand(190, 255), rand(190, 255)); // Lusje maken... for ($i = 0; $i < strlen($sCode); $i++) { // Ze zullen om-en-om in een negative of positieve rotatie staan... $iRotation = ($i % 2 == 0) ? rand(-12, -6) : rand(6, 12); $iMargin = ($i == 0) ? 14 : $i * 14 + 20; // We gaan de text in de IMG zetten.. imagettftext ($image, 11, $iRotation, $iMargin, rand(12, 22), $fontcolor, 'verdana.ttf', $sCode{$i}); } // De waarde in een sessie zetten... $_SESSION['captcha'] = $sCode; // Headertje verzenden... header('Content-type: image/png'); // De IMG weergeven... imagepng ($image); // Het is klaar... imagedestroy ($image); } else { // Error weergeven... die ('Het plaatje kon niet worden aangemaakt.'); } } ?>
Hier de controle:
<?php
// Kijken of de random code gelijk is aan die van de input...
if ($_SESSION['captcha'] != $_POST['captcha_check'])
{
// Error...
echo 'De code kwam niet overeen met die van de afbeelding.';
}
?>
<?php // Kijken of de random code gelijk is aan die van de input... if ($_SESSION['captcha'] != $_POST['captcha_check']) { // Error... echo 'De code kwam niet overeen met die van de afbeelding.'; } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|