PDA

Просмотр полной версии : Антибот картинка подскажите


AkyHa_MaTaTa
24.05.2007, 10:50
Вообшем нужно зделать антибот защиту с помощью случайного сгенерированого символов соответствено выведененых на картинку,желательно без использования БД,
без промежуточного сохранения на винт(короче сразу head("контент тайп: картинка ")), как я понял есть несколько способов это сделать:
1)1 скрипту(занимаюшимуся непосредственым выводом картинки) передается запрос на вывод картинку:
<img scr = "antibot.php?simvol=bns7HG7"> -соответствено
bns7HG7 - это как нибуть зашфрованый случайный номер(кажись так делается в слаед кмс), 2 скрипт генерирует номерок и шифрует его, ну соответсвено инклудится там где надо вывести изображения.
2)делает почти тоже самое только 2 скрипт записует в файл случ. символы а 1 скрпт. его отдтуда считывает , или например 2 скрипт генерирует два разных набора символов первое это ид символов id а второй это сами символы и записует это все в файл а
1 скрипту передается <img scr = "antibot.php?id=bns7HG7"> где id ид номер символов ну и соответсвено 1 скрипт считывает файл на соответсвее id = simvol, и выдает их, у этих двух методов есть недостаток- если записывать в фаил с атрибутом w+ то стираются все номерки(например если открыто много окон регистрации то кому то придется повторить регистрацию)
а если с a+ или r+ то очень легко зделать файл в который все это дело записуется очень больщих размеров(раз тридцать обновить страницу регистрации и файл уже весит 10m), можно конечно генерировать название файла произвольно и передовать первому скрипту его название и тот после его прочтения делает ему unlink, но это будет дефрагментировать диск лишний раз , да и не красиво
но.
Подскажите че нибудь.
p.s. Сори за орфографию - спеШил.

DIAgen
24.05.2007, 11:27
Ты что нибудь слышал про сессии?!

Нет, ну как ты мог, берешь генерируешь какой-нибудь порядок из цифор и буквочек, и выводишь это все как рисунок, ну я думаю ты знаешь как пользовать Image Functions, и так дальше пошли, и тот порядок который был у тебя сгенерирован заносишь например в $_SESSION['gen_anti_lol'] а как известно сессия у каждого пользователя различная и не повторимая...
Ну если ты не понял что я тебе сказал то тогда читай внимательно мануал по PHP, и учусь пользоваться ya.ru и google.com :rolleyes:

DIAgen
24.05.2007, 11:32
Ну и на последок вот тебе очень хорошая ссылочка по твоему сабжу
http://forum.vingrad.ru/php-graphic-libraries-gd-imagemagic.html
там ты точно найдешь ответ на свой вопросик...)))

AkyHa_MaTaTa
24.05.2007, 12:09
А ты слышал чтони буть про HTTP - заголовок, и про то что его можно парсить?Ведь сесии например могут пердаватся через плюшки либо через POST или GET. Вот например скриптик http://www.softtime.ru/info/proteus.php?down=proteus40.zip
и его уже давно обошли имено парся HTTP заголовок(почитай на их форуме), я сам прикалывался над одним знакомым, вернее над его сайтом:) .
http://forum.vingrad.ru/php-graphic-libraries-gd-imagemagic.html- пасибо конечно, но с GD я давно дружу:)

DIAgen
24.05.2007, 12:19
А ты слышал чтони буть про HTTP - заголовок, и про то что его можно парсить?Ведь сесии например могут пердаватся через плюшки либо через POST или GET. Вот например скриптик http://www.softtime.ru/info/proteus.php?down=proteus40.zip
и его уже давно обошли имено парся HTTP заголовок(почитай на их форуме), я сам прикалывался над одним знакомым, вернее над его сайтом:).
Правда! А ты знаешь, что передается только название сессии т.е индефикатор сессии, а данные которые храниться в этой сессии лежать на стороне сервера, и как же ты их достанешь это же не куки :rolleyes:

AkyHa_MaTaTa
24.05.2007, 12:27
Ладно,ладно все ты круче:), спасибо за инфу ща буду тестить как ты пишеш.

blackybr
24.05.2007, 13:03
<?php
session_start();
//генерим псевдорандомную строку и берем только 5 символов
$md5 = md5(microtime() * mktime());
$string = substr($md5,0,5);

//создаем капчу из картинки
$captcha = imagecreatefrompng("./captcha.png");

//ставим цвета
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);

//добавляем некую защиту в виде линий)
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);

//рисуем полученную строку к картинке
imagestring($captcha, 5, 20, 10, $string, $black);

//созраняем строку
$_SESSION['key'] = md5($string);

//выводим картинку
header("Content-type: image/png");
imagepng($captcha);
?>

<?php
session_start();

//Шифруем данные которые передаем и проверяем на правильность (всовпадение отсылаемого и правильного кода
if(md5($_POST['code']) != $_SESSION['key'])
{
die("Неверно!");
}else{
echo 'Верно!';
}
?>

RaiDeRz
24.05.2007, 18:59
http://www.cryptographp.com/

Raz0r
24.05.2007, 23:59
Коль пошла такая байда... http://captcha.ru/ :D

Isis
25.05.2007, 07:36
captcha.php
<?php
session_start();
session_register('code');
$_SESSION['code'] = rand(1000000,9999999);
for($i = 0; $i < 7; $i++) {
$arr[$i] = substr($_SESSION['code'],$i,1);
}
$im = imagecreate(130,40);
imagecolorallocate($im,255,255,255);
$a = 0;
for($i = 0; $i < 7;$i++)
{
$color=imagecolorallocate($im,rand(0,255),rand(0,2 55),rand(0,255));
imagestring($im,3,$a+=15,0,$arr[$i],$color);
}
header("Content-type: image/jpeg");
imagejpeg($im,'',100);
?>

form.php
<?php
session_start();
?>
<img src="captcha.php" />
<form method="post">
Enter code : <input type="text" name="get_code">
<input name="sub" type=submit value="Проверить">
</form>
<?php
if($_POST['sub']) {
if($_POST['get_code'] == $_SESSION['code']) {
echo "Картинка введена верно";
} else {
echo "Картинка введена неверно";
}
}
?>

Elekt
03.06.2007, 02:55
2AkyHa_MaTaTa

Скачай Dle5x. Там файл антибота отдельно есть. Можно прикрутить к любому проекту.