captcha на php
04.07.2008
Создаем "каптчу" или боремся со спам-ботами)
Перед нами стоит задача - написать простой скрипт, генерирующий картинку с циферками, а также нам необходимо будет проверить, соответствуют ли введенные пользователем данные изображенным на"captcha".
Первым делом пишем скрипт:
if (empty($_SESSION)) {
session_start();
}
# generate 5 digit random number
$rand = rand(10000, 99999);
$_SESSION['captcha'] = md5($rand);
if ($rand) {
header("Expires: Sun, 1 Jan 2000 12:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Content-type: image/jpeg');
$image = imagecreate(55, 15);
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 5, 0, $rand, $textColor);
imagejpeg($image);
imagedestroy($image);
}
называем его, например - security_img.php, сохраняем.
Далее в коде формы пишем:
<img src="security_img.php" alt="Security code"> <input id="security_code" name="security_code" type="text" value="" />
А проверять введенные данные на соответствие будем следующим образом:
if($_SESSION['captcha'] == md5($_POST['security_code']) ) {
echo "Вы человек!";
} else {
echo "ТЫ РОБОТ-СПАМЕР =)!";
}
Tags: PHP
05.07.2008 в 07:46
Хз, у меня кстати несмотря на хедиры "не кешировать" все равно бывают случаи, когда картинка кешируется, потому чтобы наверняка, я туда еще хвост добавляю => src="security_img.php"
[Ответить]
05.07.2008 в 07:47
теги вырезались :) вообщем я хотел написать src="security_img.php?435fefewfwef".
[Ответить]
24.10.2008 в 22:52
Я обычно в конец ссылки на генерирующееся изображения, добавляю rand или дату текущую, а вообще на сайте captcha.ru там пример как не нужно писать капчи :) Лично мы взяли их решение за основу.
[Ответить]
30.06.2009 в 08:36
Хорошо бы пример обновить для создания капчей, которые бы пользовались популярностью на данный момент: с искривленным текстом и прочими эффектами, чтобы защита не была формальной. Это не упрек, это пожелание, так как считаю, что топик пост был бы более актуальным :)
[Ответить]