[php] Captcha class
Author: Martijn Cuijten
19
apr
Ik ben de laatste tijd bezig met classes in php, als gevolg hiervan ben ik veel dingetjes aan het uitzoeken en uitproberen. Bij wijze van test heb ik een captcha class geschreven, captcha zijn die afbeeldingen met tekens erin die je vaak bij formulieren ziet, ze worden gebruikt om spambots tegen te houden.
maar goed genoeg geluld nu naar de code.
Voorbeeld: klik hier
Download: klik hier
captcha.class.php
-
-
<php
-
-
class Captcha {protected $img;
-
-
protected $code;
-
-
private $font = "ARLRDBD.TTF";
-
-
function __construct() {
-
-
-
-
$this->img = imagecreatetruecolor(150, 50);
-
-
}
-
-
private function createCode($length)
-
-
{
-
-
-
-
for ($i = 0; $i < $length; $i++)
-
-
{
-
-
-
-
$this->code .= $characters[$nr];
-
-
}
-
-
return $this->code;
-
-
}
-
-
public function createImg($codeLength,$achtergrondkleur, $aantal_lijnen)
-
-
{
-
-
/* Create the code and store it in a session var */
-
-
$code = $this->createCode($codeLength);
-
-
-
-
/* Img settings */
-
-
$kleur = imagecolorallocate($this->img, 255, 0, 0);
-
-
$lijnkleur = imagecolorallocate($this->img, 200, 200, 200);
-
-
$font = $this->font;
-
-
$background = $this->getRGB($achtergrondkleur);
-
-
$achtergrond = imagecolorallocate($this->img, $background[0], $background[1], $background[2]);
-
-
/* Image methods */
-
-
imagefill($this->img, 0, 0, $achtergrond);
-
-
ImageTTFText
($this->
img,
16,
mt_rand(-6,
6),
35,
35,
$kleur,
$font,
$code);
-
-
/* Create lines */
-
-
for ($i = 0; $i < $aantal_lijnen; $i++)
-
-
{
-
-
ImageLine
($this->
img,
0,
mt_rand(-50,
100),
550,
mt_rand(0,
150),
$lijnkleur);
-
-
}
-
-
return imagepng($this->img, $file);
-
-
}
-
-
public function getRGB($hex = ”) {
-
-
-
-
-
-
for ($i = 0; $i < 6; $i += 2) {
-
-
-
-
}
-
-
return $rgb;
-
-
}
-
-
public function __destruct() {
-
-
imagedestroy($this->img);
-
-
}
-
-
}
-
-
?>
je kunt hem op de volgende manier gebruiken:
captcha.php
-
-
<php
-
-
require_once("captcha.class.php");
-
-
$captcha = new Captcha();
-
-
print $captcha->
createImg(6,
"eeeeee",
5);
-
-
?>
formulier.php
-
-
<php
-
-
-
{
-
-
if (strtoupper($_POST[‘cCode’]) ==
$_SESSION[‘captcha_code’])
-
-
-
-
else
-
-
-
-
}
-
-
?>
-
<form method="post">
-
<img src="captcha.php" />
-
<input name="cCode" />
-
<input name="submit" type="submit" /></form>
Mocht je vragen hebben over de werking van deze klasse of heb je misschien opmerkingen over wat beter kan meld het dan!
One Response for "[php] Captcha class"
Deze captcha is erg zwak omdat het:
- steeds dezelfde kleur gebruikt voor de letters
- steeds dezelfde positie gebruikt voor de letters (alleen de angle verandert)
- steeds hetzelfde font wordt gebruikt.
- geen andere kleuren gebruikt voor de achtergrond noise.
Al deze punten maken de captcha snel automatiseerbaar en dus niet veilig.
Verder is het wel een goed begin!
Ps. ik heb ook zelf een captcha ontwikkeld, misschien kan je het als inspiratie gebruiken: http://www.duocoding.nl/get/captcha
Leave a reply
You must be logged in to post a comment.