captcha на php

Создаем “каптчу” или боремся со спам-ботами)

Перед нами стоит задача – написать простой скрипт, генерирующий картинку с циферками, а также нам необходимо будет проверить, соответствуют ли введенные пользователем данные изображенным на”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 "ТЫ РОБОТ-СПАМЕР =)!";
}

4 Responses to “captcha на php”

  1. Хз, у меня кстати несмотря на хедиры “не кешировать” все равно бывают случаи, когда картинка кешируется, потому чтобы наверняка, я туда еще хвост добавляю => src=”security_img.php”

  2. теги вырезались 🙂 вообщем я хотел написать src=”security_img.php?435fefewfwef”.

  3. Roman says:

    Я обычно в конец ссылки на генерирующееся изображения, добавляю rand или дату текущую, а вообще на сайте captcha.ru там пример как не нужно писать капчи 🙂 Лично мы взяли их решение за основу.

  4. Tduty says:

    Хорошо бы пример обновить для создания капчей, которые бы пользовались популярностью на данный момент: с искривленным текстом и прочими эффектами, чтобы защита не была формальной. Это не упрек, это пожелание, так как считаю, что топик пост был бы более актуальным 🙂

Leave a Reply




*