Сейчас: 18:55:09   29-го марта 2024 г.
UsefulScript.ruСкриптыЗащита сайтаПростая капча для сайта
33
144

Создаем простую капчу для защиты сайта от ботов

Предлагаем Вашему вниманию простой и небольшой скрипт, генерирующий защитный код (капчу) для защиты Вашего сайта от регистраций и оставления комментариев ботами.


Сразу хотим заметить, что для работы данного скрипта необходима поддержка хостингом библиотеки php_gd2.dll. Данная библиотека должна быть раскомментирована в файле php.ini на стороне сервера!

Также в данном скрипте используется шрифт ARIALBD.TTF. Если у Вас нет данного шрифта, то Вы можете скачать его с нашего сайта по ссылке - ARIALBD.rar (размер файла - 40 Кб).


Пример генерации и проверки цифрового кода (капчи) расположен чуть ниже:







Главным преимуществом данного скрипта является то, что ключ к защитному коду всегда хранится на сервере и его невозможно заполучить, просмотрев исходный код странички в браузере!


Для начала необходимо будет создать файл, который будет генерировать изображение защитного кода (капчи). Для этого создайте файл (например, img_captcha.php) и поместите в него следующий PHP код:

PHP код:
<?php
$width 
150;        // Ширина изображения
$height 50;        // Высота изображения
$sign 5;            // Количество символов
$img_code '';

session_start();

// Символы, которые будут использованы в защитном коде
$letters = array('A','B','C','D','E','F','G','H','J','K','M','N','P','Q','R','S','T',
                 
'U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');
// Компоненты, используемые при создании для RGB-цвета
$col = array(446688111133155177199);
     
$img imagecreatetruecolor($width$height);
$fon imagecolorallocate($img255255255);        // Белый фон изображения
imagefill($img00$fon);

$letter_Width intval((0.9*$width)/$sign);    // Ширина, отводимая под один символ

for($j=0$j<$width$j++) {                // Заливка фона случайными точками
    
for($i=0$i<($height*$width)/600$i++) {
        
// Генерируем случайный цвет
        
$keys array_rand($col3);
        
$color imagecolorallocatealpha($img,
            
$col[$keys[0]], $col[$keys[1]], $col[$keys[2]], rand(1030));
        
// Выводим случайную точку
        
imagesetpixel($imgrand(0,$width), rand(0,$height), $color);
    }
}

for(
$i=0$i<$sign$i++) {                        // Накладываем защитный код
    
$keys array_rand($col3);
    
$color imagecolorallocatealpha($img,
        
$col[$keys[0]], $col[$keys[1]], $col[$keys[2]], rand(1030));

    
$letter $letters[rand(0,sizeof($letters)-1)]; // Генерируем случайный символ

    // Координаты вывода символа
    
if(empty($x)) { $x intval($letter_Width*0.2); }
    else {
     if(
rand(0,1)) $x $x $letter_Width rand(0intval($letter_Width*0.1));
     else 
$x $x $letter_Width rand(0intval($letter_Width*0.1));
    }
    
$y randintval($height*0.7), intval($height*0.8) );

    
$size rand(intval(0.4*$height), intval(0.5*$height));
    
$angle rand(050) - 25;                    // Задаем угол поворота символа
    
$img_code .= $letter;
    
// Выводим сгенерированный символ на изображение
    
imagettftext($img$size$angle$x$y$color"arialbd.ttf"$letter);
}
$_SESSION["img_code"] = $img_code;

header("Content-type: image/jpeg");
imagejpeg($img);
?>

Далее на той страничке, где понадобится использование защитного кода для защиты от ботов, в самом верху, добавьте следующий код:

PHP код:
<?php
session_start
();
if(isset(
$_POST["img_code"]) && isset($_SESSION["img_code"])) {

if(
$_POST["img_code"] == $_SESSION["img_code"])
 
$_SESSION["simple_captcha"]='<b style="color: green;">Защитный код верен!</b>';
else
 
$_SESSION["simple_captcha"]='<b style="color: red;">Неверный защитный код!</b>';
header("Location: simple_captcha.php");
}
?>

А в том месте, где необходимо вывести изображение защитного кода (капчи), используйте следующий код:

PHP код:
<?php
if(!isset($_POST["img_code"]) or !isset($_SESSION["img_code"])) {
    echo 
'<form action="'.$_SERVER["PHP_SELF"].'" name="img_cod" method="post">';
    echo 
'<img src="img_captcha.php" alt=""><br>';
    echo 
'<input type="text" name="img_code"><br>';
    echo 
'<input type="submit" name="submit" value="Отправить">';
    echo 
'</form>';
    echo 
$_SESSION["simple_captcha"];
    
$_SESSION["simple_captcha"]='';
}
unset( 
$_SESSION["img_code"] );
?>

Но не стоит надеяться, что таким образом, возможно стопроцентно обезопасить свой сайт от ботов и спама. Данный скрипт генерирования защитного кода (капчи) конечно поможет защитить Ваш сайт от большого количества автоматических регистраций и оставления комментариев ботами, но не является 100% гарантией защиты.

Дата создания: 17:47:44 04.11.2011 г.
Дата обновления: 20:27:14 09.11.2014 г.
Посещений: 22591 раз(а).

Комментарии посетителей (12 шт.):
Garcy
-1
# 2026
(00:36:34  09.11.2014 г.)

$_SESSION[img_code] = $img_code; кавычки не поставили в массиве.
Ответить

Administrator
0
# 2027
(20:29:00  09.11.2014 г.)

Спасибо, уже исправил.
Ответить

Kenpck
0
# 2335
(09:08:34  15.03.2015 г.)

Здравствуйте, у меня возникла проблема, которую я не могу решить, и прошу вас помочь мне. Проблема состоит в регистре капчи. Например, в капче написано вот такое: AFG4V, а пользователь введёт aFg4V, то капча будет неверна, как это решить?
Ответить

Administrator
1
# 2336
(14:05:32  15.03.2015 г.)

Довольно просто. Преобразуйте введенную капчу и правильный ответ к верхнему регистру. Для этого замените if($_POST["img_code"] == $_SESSION["img_code"]) на
if(strtoupper($_POST["img_code"]) == strtoupper($_SESSION["img_code"]))
Ответить

Faizulla
0
# 2348
(12:51:01  24.03.2015 г.)

Как добавить кнопку обновления капчи?
Ответить

Administrator
2
# 2351
(22:12:14  24.03.2015 г.)

Нужно добавить изображению id (например, capcha):
echo '<img src="img_captcha.php" id="capcha" border="0" alt=""><br>';
И добавить вот такую кнопку:
echo '<input type="button" onclick="document.getElementById(\'capcha\').src=\'img_captcha.php?id=\'+
Math.round(Math.random()*9999)" value="Обновить">';
Ответить

юрий
0
# 4111
(18:25:22  25.10.2017 г.)

У меня написано: Введите символы с картинки *, а картинка пуста. Что делать? Не поможете?
Ответить

Administrator
0
# 4112
(19:09:55  25.10.2017 г.)

Чем тут помочь? Скопируйте код заново, ведь в примере на нашем сайте все работает. Тестируйте для начала на пустой страничке, а уже потом встраивайте на сайт.
Ответить

opiums
0
# 4128
(19:04:19  09.11.2017 г.)

Доброго времени суток, уважаемые администраторы, пытался привязать данную капчу к форме авторизации к одной CMS, но безуспешно, если не вводить её, то авторизация всё равно проходит, даже если ошибка "Неверный защитный код!". Как можно запретить авторизацию, если человек не ввёл капчу?
Ответить

Павел
0
# 4205
(17:06:03  27.12.2017 г.)

Есть вопрос:
header("Location: simple_captcha.php") - что с этим делать?
Если создавать, то что туда писать? Или это очепятка и там должен быть img_captcha.php?
Ответить

Administrator
0
# 4206
(19:58:55  27.12.2017 г.)

simple_captcha.php - это страничка, на которую добавляется капча. После проверки введенной капчи будет осуществлен редирект на указанную страничку.
Ответить

Михаил
0
# 5004
(19:39:22  02.10.2023 г.)

Любопытное решение
Ответить

Закрыть
Ваше имя:
356 + 12 =
Добавить комментарий:
Ваше имя:
356 + 12 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 10

Какие темы необходимо добавлять на сайт?