Создаем простую капчу для защиты сайта от ботов
Предлагаем Вашему вниманию простой и небольшой скрипт, генерирующий защитный код (капчу) для защиты Вашего сайта от регистраций и оставления комментариев ботами.
Сразу хотим заметить, что для работы данного скрипта необходима поддержка хостингом библиотеки php_gd2.dll. Данная библиотека должна быть раскомментирована в файле php.ini на стороне сервера!
Также в данном скрипте используется шрифт ARIALBD.TTF. Если у Вас нет данного шрифта, то Вы можете скачать его с нашего сайта по ссылке - ARIALBD.rar (размер файла - 40 Кб).
Пример генерации и проверки цифрового кода (капчи) расположен чуть ниже:
|
Главным преимуществом данного скрипта является то, что ключ к защитному коду всегда хранится на сервере и его невозможно заполучить, просмотрев исходный код странички в браузере!
Для начала необходимо будет создать файл, который будет генерировать изображение защитного кода (капчи). Для этого создайте файл (например, 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-цвета
$col = 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++) {
// Генерируем случайный цвет
$keys = array_rand($col, 3);
$color = imagecolorallocatealpha($img,
$col[$keys[0]], $col[$keys[1]], $col[$keys[2]], rand(10, 30));
// Выводим случайную точку
imagesetpixel($img, rand(0,$width), rand(0,$height), $color);
}
}
for($i=0; $i<$sign; $i++) { // Накладываем защитный код
$keys = array_rand($col, 3);
$color = imagecolorallocatealpha($img,
$col[$keys[0]], $col[$keys[1]], $col[$keys[2]], 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, "arialbd.ttf", $letter);
}
$_SESSION["img_code"] = $img_code;
header("Content-type: image/jpeg");
imagejpeg($img);
?>
Далее на той страничке, где понадобится использование защитного кода для защиты от ботов, в самом верху, добавьте следующий код:
<?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
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% гарантией защиты.
Перед публикацией все комментарии проходят обязательную модерацию!
Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
if(strtoupper($_POST["img_code"]) == strtoupper($_SESSION["img_code"]))
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="Обновить">';
header("Location: simple_captcha.php") - что с этим делать?
Если создавать, то что туда писать? Или это очепятка и там должен быть img_captcha.php?