Добро пожаловать в Forum.iCoder.Uz

Присоединяйтесь к нам сейчас, чтобы получить доступ ко всем нашим функциям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы на существующие темы, повышать репутацию других участников, получать собственный личный мессенджер и многое другое. Это также быстро и совершенно бесплатно, так чего же вы ждете?

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

Информация о теме

О теме Здравствуйте, вы читаете тему Создаем простую капчу для защиты сайта от ботов созданную в в разделе PHP для начинающих пользователем impuLse #IT. Эта тема была просмотрена 890 раз(а), получила 1 комментариев и 2 очки реакции...
Название категории PHP для начинающих
Название темы Создаем простую капчу для защиты сайта от ботов
Автор темы impuLse #IT
Дата начала
Ответы
Просмотры
Количество реакций
Последнее сообщение #Bush

impuLse #IT

Администратор
Команда форума
Регистрация
12.03.2015
Сообщения
899
Реакции
449
Баллы
35
  • Автор темы
  • Администратор
  • #1
Предлагаем Вашему вниманию простой и небольшой скрипт, генерирующий защитный код (капчу) для защиты Вашего сайта от регистраций и оставления комментариев ботами.
58b31aca61bba.png

Сразу хотим заметить, что для работы данного скрипта необходима поддержка хостингом библиотеки php_gd2.dll. Данная библиотека должна быть раскомментирована в файле php.ini на стороне сервера!
Так же в данном скрипте используется шрифт ARIALBD.TTF. Если у Вас нет данного шрифта, то Вы можете скачать его по ссылке - rusfont.ru/my_skachat.php?f=ARIALBD.TTF.

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

Для начала необходимо будет создать файл, который будет генерировать нужный нам защитный код (капчу). Для этого создайте файл (например, img_captcha.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-цвета
$digital_data = array(44,66,88,111,133,155,177,199);

$img = imagecreatetruecolor($width, $height);
$fon = imagecolorallocate($img, 255, 255, 255);    // Белый фон изображения
imagefill($img, 0, 0, $fon);

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

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

for($i=0; $i<$sign; $i++) {                        // Накладываем защитный код
   $color = imagecolorallocatealpha($img,
            $digital_data[rand(0,count($digital_data)-1)],
            $digital_data[rand(0,count($digital_data)-1)],
            $digital_data[rand(0,count($digital_data)-1)],
            rand(10,30));

   $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(0, intval($letter_Width*0.1));
     else $x = $x + $letter_Width - rand(0, intval($letter_Width*0.1));
   }
   $y = rand( intval($height*0.7), intval($height*0.8) );

   $size = rand(intval(0.4*$height), intval(0.5*$height));
   $angle = rand(0, 50) - 25;                    // Задаем угол поворота символа
   $img_code .= $letter;
   // Выводим сгенерированный символ на изображение
   imagettftext($img, $size, $angle, $x, $y, $color, "image/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"]='<font color=green><b>Защитный код верен!</b></font>';
else
 $_SESSION["simple_captcha"]='<font color=red><b>Неверный защитный код!</b></font>';
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" border="0" 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% гарантией защиты.
 

#Bush

Заблокирован
Регистрация
25.02.2017
Сообщения
245
Реакции
114
Баллы
0
Веб-сайт
icoder.uz
Эмм... Я новичок в сфере PHP если не секрет куда вставлять?
 
shape1
shape2
shape3
shape4
shape7
shape8
Сверху Снизу