|
|
|
| Нужен скрипт защитной картинки от авто-рег, пожалуйста и объясните, как проверять верно ли введено значение. | |
|
|
|
|
|
|
|
для: bartik
(21.09.2006 в 21:25)
| | самый простой пример это через Сессии .. ты создаешь картинку пишешь на нее код этот же код ты регистрируешь в сессию , а после просто проверяешь какой код ввели с картинки через форму с сессией
например if($_SESSION['code'] != $_POST['code'] )
{
echo "Error";
}
else
{
echo "True";
} | |
|
|
|
|
|
|
|
для: Ressfourt
(21.09.2006 в 21:29)
| | Ressfourt
Вашего кода недостаточно.
<?php
/*
Если я удалю cookie с SID, то $_SESSION['code'] существовать не будет,
примет пустое значение при вызове.
$_POST['code'] тоже могу не посылать, либо пустым его сделать.
В итоге они оба имеют одинаковое значение.
Нужно тогда сделать так:
*/
if($_SESSION['code'] == $_POST['code'] && !empty($_SESSION['code']))
{
echo "OK";
}
else
{
die("Error");
}
?>
|
| |
|
|
|
|
|
|
|
для: Unkind™
(21.09.2006 в 21:36)
| | Наслаждайтесь, картинка не только просто выводит буквы, но и крутит их и добавляет шум ну это уже от сканеров картинок
<?php
session_start();
$session_kod='';
$im=imagecreatefromjpeg("back.jpg");//файл с фоном
$tc=imagecolorallocate($im, 220,220,255);//цвет кода
$tp1=imagecolorallocate($im, 255,000,000);//цвет пикселей шума1
$tp2=imagecolorallocate($im, 000,255,000);//цвет пикселей шума2
$tp3=imagecolorallocate($im, 000,000,255);//цвет пикселей шума3
for($i=1;$i<99;$i++) imagesetpixel($im, Rand(1,130), Rand(1, 24), $tp1);//шумы1
for($i=1;$i<99;$i++) imagesetpixel($im, Rand(1,130), Rand(1, 24), $tp2);//шумы2
for($i=1;$i<99;$i++) imagesetpixel($im, Rand(1,130), Rand(1, 24), $tp3);//шумы3
$arr_letter=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z');
$arr_x=array(30,46,62,78,94);//расстановка попикселям букв
$arr_kod=array();
for ($i_zn=0;$i_zn<5;$i_zn++){$i_rand=$arr_letter[rand(2,24)];imagettftext($im, 15,rand(-15,15),$arr_x[$i_zn],rand(15,24),$tc,'font.ttf', $i_rand);$arr_kod[]=$i_rand;}
$security_kod=implode("", $arr_kod);//сборка массива
$_SESSION['session_kod'] =md5($security_kod);//сохранение в сессии
header("Content-type: image/jpg");
imagejpeg($im);
imagedestroy($im);
/*
В файле с формой пишем <img src="picture.php">
В файле, который проверяет данные формы, сравниваем значение поля в введенными символами и зарегистрированную сессию.
В файле check.php проверяем:
PHP:
<?php
session_start();
if ($_POST['text']==$_SESSION['session_kod']) {echo "Код введен верно";}
else {echo "Код введен не верно"; }
?>
*/
?>
|
| |
|
|
|
|
|
|
|
для: indexer
(21.09.2006 в 21:46)
| | Момент не догледел там же MD5 задействовано
тогда проверяем так
<?php
if (md5 ($_POST['text'])==$_SESSION['session_kod']) {echo "Код введен верно";}
else {echo "Код введен не верно"; }
?>
//$_POST['text'] то что передал пользователь, проганяем все через MD5 и сравниваем Хеши
|
| |
|
|
|
|
|
|
|
для: indexer
(21.09.2006 в 21:46)
| | >Наслаждайтесь, картинка не только просто выводит буквы, но и крутит их и добавляет шум ну это уже от сканеров картинок
Что-то не удаётся насладится. :-( Картинка не создаётся.
Я уже вот это:
>
>$im=imagecreatefromjpeg("back.jpg");//файл с фоном
>
|
Заменил на такое:
$im = @imagecreate(130, 24);
$background_color = imagecolorallocate($im, 255, 255, 255);
|
и back.jpg подсовывал... Что-то не найду, в чём причина. | |
|
|
|
|
|
|
|
для: Unkind™
(21.09.2006 в 21:36)
| | я показал самый простой пример :) | |
|
|
|
|
|
|
|
для: bartik
(21.09.2006 в 21:25)
| | Возможно вас заинтересует скрипт по ссылке http://www.softtime.ru/info/randomimage.php | |
|
|
|
|
|
|
|
для: bartik
(21.09.2006 в 21:25)
| | Можно обойтись без сессий. Создавать в БД таблицу с id и code. Но только проблемы будут с TTL кода | |
|
|
|
|
|
|
|
для: mech
(21.09.2006 в 22:02)
| | даже не вздумайте, грузть в базу картинки. за такие дела надо голову отрывать, база не для того сделана, хоть и может принять картинки. | |
|
|
|
|
|
|
|
для: indexer
(21.09.2006 в 23:00)
| | Он, по-моему, имел ввиду не загружать в БД картинку, а сделать что-то вроде своих сессий...
Все равно лишнее... | |
|
|
|
|
|
|
|
для: Unkind™
(22.09.2006 в 01:02)
| | bartik какой вариант выбрали?
Извините сразу не понял, Можно конечно случайно выбрать из базы ссылку на картинку и ее показать, передать скрипту что за картинка была выбрана, и сравнить оба значения. Но тут есть несколько но.
Во первых все равно придется стартовать сессию(можно обойти конечно проверкой ip мол вы уже посылали с этого ip)либо сразу после отправки использовать редирект. потому что если нажать на кнопку обновить данные опять будут отправлены (так и надо делать).
Во вторых большой ли код можно создать таким образом? хотя очень большой он конечно не нужен.
Я так думаю что при отправке чего либо всегда нужно стартовать сессию если ее еще нет, очень удобно записывать в нее некоторые переменные, так почему бы не воспользоваться? Зачем ломать голову и придумывать велосипед. | |
|
|
|
|
|
|
|
для: mech
(21.09.2006 в 22:02)
| | Всем спасибо | |
|
|
|
|
|
|
|
для: bartik
(22.09.2006 в 01:05)
| | Сабж нашёл данный код от антиботов, но проблема при проверке, как бы вы проверяли? я пробывал через if но нифига не выходит.... help me please
<?php
class genrandomimage
{
var $lenght = 7; // Длина строки
var $string = ''; // Результирующая строка
# Генерация строки
function genstring()
{
$chars = array ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
$result_string = '';
for($i = 0; $i < $this -> lenght; $i++)
{
$random_char = mt_rand( 0, ( count ( $chars ) - 1 ) );
$result_string .= $chars[$random_char];
}
$this -> string = $result_string;
}
# Генерация изображения
function genimage()
{
$im = imagecreate( 10 * $this -> lenght + 5, 20 );
$gray = imagecolorallocate( $im, 228, 228, 228 );
$black_1 = imagecolorallocate( $im, 150, 150, 150 );
$black = imagecolorallocate( $im, 0, 0, 0 );
$white = imagecolorallocate( $im , 255, 255, 255 );
$string = imagecolorallocate( $im, 90, 90, 90 );
/* Генерация шума */
for($i = -2; $i < ceil ( ( 10 * $this -> lenght ) / 5 ); $i++)
{
imageline( $im, $i * 5, 20, $i * 5 + 20, 0, $black_1 );
}
for($i = -2; $i < ceil ( (10 * $this -> lenght) / 5 ); $i++)
{
imageline( $im, $i * 5+20, 20, $i * 5 , 0, $white );
}
/* Конец генерации шума */
# Рисуем строку на картинке
imagestring( $im, 5, 6, 2, $this -> string, $string );
# Рамка
imageline( $im, 0, 0, 10*$this -> lenght + 5, 0, $black );
imageline( $im, 0, 19, 10*$this -> lenght + 5, 19, $black );
imageline( $im, 0, 0, 0, 20, $black );
imageline( $im, 10*$this -> lenght + 4, 0, 10*$this -> lenght + 4, 20, $black );
header('Content-type: image/png');
imagepng($im);
}
}
session_start();
session_name('sec_code');
$im = new genrandomimage ();
$im->genstring();
$_SESSION['sec_code_session'] = $im->string;
$im->genimage();
?>
|
| |
|
|
|
|
|
|
|
для: bartik
(22.09.2006 в 14:59)
| | Нужно создать форму...
form.php
<?php
header("Content-type: text/html; charset=windows-1251");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-cache, must-relative");
echo <<< END
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Форма</title>
</head>
<body>
<form action="handler.php" method="post">
Текст:<br />
<input type="text" name="text" /><br />
<img src="code.php" alt="CODE" /><br />
Введите код с картинки:<br />
<input type="text" name="code" /><br />
<input type="submit" value="[OK]" /><br />
</form>
</body>
</html>
END;
?>
|
И проверка...
handler.php
<?php
session_start();
if($_SESSION['sec_code_session'] != $_POST['code'] or empty($_POST['code']))
{
header("Content-type: text/html; charset=windows-1251");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-cache, must-relative");
echo <<< END
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Error</title>
</head>
<body>
Ошибка: проверочный код введен неверно...
<a href="javascript:history.back(1)">Назад</a><br />
</body>
</html>
END;
die();
}
//Остальной код...
?>
|
| |
|
|
|
|
|
|
|
для: Unkind™
(22.09.2006 в 15:24)
| | Спасибо я понял я забыл сесию открывать =) | |
|
|
|
|