Scripts

GD2 key generator

met deze afbeelding ben je in iedergeval nu goed beveiligt tegen brute force aanvallen op je login script wat veel mensen deden was de code in de broncode vermelden als en dan bewaarden ze de waarden ook nog een in een hidden textfield genaamd secret code nou daar komt elke bot binnen een seconde achter wat de nog weer nieuwere bot's kunnen is het plaatje scannen op letters en cijfers daarom heb ik het zo gedaan dat de karakter elke keer een verschillende draai krijgen heel handig tegen die bots dan hebben ze geen hou vast en dan is een brute force vrijwel onmogelijk vergeet niet deze script voorkomt dat de gene die de form invult niet een bot is dus je kan altijd nog gekraakt worden door escaping etc maar dat kan je heel makkelijk zelf verhelpen maar daar heb ik het deze keer niet over dat komt in mijn volgende script Wat moet je doe, dat is vrij simpel noem de script bijv img.php of wat je dan ook wilt en zet hem dan in een tag bijv en je moet natuurlijk gd functies aan hebben staan De code die wordt gegenereerd in het plaatje, wordt ook opgeslagen in een SESSION. Dit is $_SESSION['code']. In $_SESSION['code'] staat dus het gegenereerde woord. Wanneer iemand de code invoerd in een 'form input field' (tekstveldje in HTML), dan kun je dus de ingevoerde waarde, matchen op $_SESSION['code']. Komt dit overeen, dan is het goed gedaan, zo niet dan moet diegene het nogmaals proberen.

gd2-key-generator
<?php

//hier start de session
session_start();

//hier zegen we tegen de browser dat het om een afbeelding
header("Content-type: image/jpeg");

//deze functie begin je de afbeelding
$img = @imagecreate(100,20);

// Met deze functie stel je een kleur waarden in 255 is geen van alle kleuren en 0 is alle kleuren bij elkaar
// door voor de grafische mensen onder ons is 255 de nul waarden

$bg = imagecolorallocate($img, 255, 255, 255);
$txt = imagecolorallocate($img, 0, 0, 0);

// hier beginnen we met een random getal te genereren
// ik denk dat srand en rand wel bekend zijn bij de meeste mensen
// maar voor mensen die het niet weten leg ik het toch effe uit
// met srand stel je een seed in voor de rand
// ik gebruik hier time maar je kan ook gewoon alles gebruiken

$seed = time();
$seed = srand($seed);

//met md5 kan je heel een heel mooie code met cijfers en letters genereren
$rand = md5(rand());

//zoals je nu ziet gebruik ik nu date dat is om een andere seed te genereren
$seed2 = date("zs");
$seed2 = srand($seed2);
$start = rand(0,22);

// zoals je mischien al ziet gebruik ik deze random van een willekeurige plek uit de 
// 32 karakters lange code een code te plukken van maar 10 karakters lang
$code = substr($rand,$start,10);

// ik sla het op in een sessie zodat je het in een andere script kan vergelijken
// met de echte code en de input van de gebruiker bijv in een if statement
$_SESSION['code'] = $code;

//en hiermee plak je de code op het plaatje
imagestring($img, 10, 5, 2,  $_SESSION['code'], $txt);

// hier begint het anti bot truukje
// de nieuwere bots die worden gebruikt bij brute force aanvallen
// die kunnen tekens herken die ze scannen van het plaatje af
// daarom gaan wij het plaatje omdraaien zodat ze niet meer horizontaal te lezen zijn

//random hoef ik niet te vertellen
$angle_choice = date("sz");
$angle_choice = srand($angle_choice);
$angle_choice = rand(1,2);

//dit is eigenlijk een verkorte versie van een if statement ik conroleer de output van
// de random hierboven hier gebeurt ook de selectie of hij cw of ccw draait
$angle_choice = ($angle_choice == 1)?"angle_neg" : "angle_pos";

//als het deze word draait hij cw
$angle_neg = rand(-7,-2);
//alls het deze word draait hij ccw
$angle_pos = rand(7,2);

//deze functie draait de bron afbeelding om in de hoek die opgegeven is en plakt die
// in een nieuwe afbeelding
$rotate = imagerotate($img,$$angle_choice,$bg);

//nu maken we van onze code een output
imagejpeg($rotate);

//en nu vernietigen we het plaatje
imagedestroy($rotate);
imagedestroy($img);

?> 

Reacties

0
Nog geen reacties.