Sunday, July 20, 2008

implement captcha system in your website

What is captcha
captcha is the test which is used to confirm that the response is not generated by a computer. means response is generated by a human being.
How to implement the captcha system in your website?
This script generates images (known as "Captcha's") which contain security codes used for protecting a form from spam bots. By encoding a 'password' inside an image and asking the user to re-enter what they see you can verify the user is a human and not automated software submitting your form.


session_start();

/** File: CaptchaImages.php*

Author: * Copyright: 
2008 Ankur Garg

Date: 20/07/2008
* Requirements: PHP 4/5 with GD and

class
CaptchaImages {
var $font = 'monofont.ttf';
function generateCode($characters) {
/* list all possible characters, similar looking characters and vowels have been removed */
$possible = '23456789bcdfghjkmnpqrstvwxyz';
$code = ";
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0,
strlen($possible)-1), 1);

$i++;
}
return $code;
}
function CaptchaImages
($width='120',$height='40',$characters='6') {

$code = $this->generateCode($characters);
/* font size will be 75% of the image height */
$font_size = $height * 0.75;
$image = imagecreate($width, $height) or die
('Cannot initialize new GD image stream');


/* set the colours */

$background_color = imagecolorallocate
($image, 255, 255, 255);

$text_color = imagecolorallocate
($image, 20, 40, 100);

$noise_color = imagecolorallocate
($image, 100, 120, 180);

/* generate random dots in background */
for( $i=0; $i<($width*$height)/3; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width),
mt_rand(0,$height), 1, 1, $noise_color);

}

/* generate random lines in background */

for( $i=0; $i<($width*$height)/150; $i++ ) {
imageline($image, mt_rand(0,$width),
 mt_rand(0,$height), 
mt_rand(0,$width), mt_rand(0,$height)
, $noise_color);


}

/* create textbox and add text */

$textbox = imagettfbbox($font_size, 0,
$this->font, $code) or die
('Error in imagettfbbox function');


$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $font_size, 0,
$x, $y, $text_color,
$this->font , $code) or die
(
'Error in imagettftext function');
/* output captcha image to browser */
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
$_SESSION['security_code'] = $code;
}
}

$width = isset($_GET['width']) &&
$_GET['height'] < 600 ? $_GET['width'] : '120';
$height = isset($_GET['height']) &&
$_GET['height'] < 200 ? $_GET['height'] : '40';

$characters = isset($_GET['characters']) &&
$_GET['characters'] > 2 ? $_GET['characters'] : '6';

$captcha = new CaptchaImages
($width,$height,$characters);


?>

Copy and paste the above code and save it on your webserver as CaptchaImages.php.You will also need to place a copy of the "Monofont" font in the same directory as the CaptchaImages.php file. (Alternatively you can replace the line var $font = 'monofont.ttf'; with the name of whatever font you want to use)download . If you do not have this font you can take for me just give a request on ankur.garg@wizom.com.

Place the following code on your form. This will generate an image with a random string of characters along with the text field where the user will retype the code.



php" />


Security Code:




"security_code" type="text" />

You can also specify certain options for the image by passing them as variables to CaptchaImages.php.

The options available are the width and height of the image and the number of characters



php?

width=100&height=40&characters=5″ alt="captcha" />




name="security_code" type="text" />



session_start();
if(($_SESSION['security_code'] ==
$_POST[ security_code']) 
&& (!empty($_SESSION['security_code'])) ) {



// Insert you code for processing the form here,
e.g emailing the submission, 
entering it into a database. 

unset($_SESSION['security_code']);


} else {
// Insert your code for showing an error message here

}
?>
Join my Business Networking site

No comments:

Post a Comment