Антибот картинка подскажите

Discussion in 'PHP' started by AkyHa_MaTaTa, 24 May 2007.

  1. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    Вообшем нужно зделать антибот защиту с помощью случайного сгенерированого символов соответствено выведененых на картинку,желательно без использования БД,
    без промежуточного сохранения на винт(короче сразу 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. Сори за орфографию - спеШил.
     
  2. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Ты что нибудь слышал про сессии?!

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

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Ну и на последок вот тебе очень хорошая ссылочка по твоему сабжу
    http://forum.vingrad.ru/php-graphic-libraries-gd-imagemagic.html
    там ты точно найдешь ответ на свой вопросик...)))
     
    1 person likes this.
  4. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    А ты слышал чтони буть про 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 я давно дружу:)
     
  5. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Правда! А ты знаешь, что передается только название сессии т.е индефикатор сессии, а данные которые храниться в этой сессии лежать на стороне сервера, и как же ты их достанешь это же не куки :rolleyes:
     
  6. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    Ладно,ладно все ты круче:), спасибо за инфу ща буду тестить как ты пишеш.
     
  7. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    PHP:
    <?php
    session_start
    (); 
    //генерим псевдорандомную строку и берем только 5 символов 
    $md5 md5(microtime() * mktime()); 
    $string substr($md5,0,5);

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

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

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

    //рисуем полученную строку к картинке
    imagestring($captcha52010$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 
    'Верно!'
    }
    ?>

     
    1 person likes this.
  8. RaiDeRz

    RaiDeRz Elder - Старейшина

    Joined:
    5 Apr 2007
    Messages:
    121
    Likes Received:
    5
    Reputations:
    0
  9. Raz0r

    Raz0r Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    126
    Likes Received:
    20
    Reputations:
    0
    Коль пошла такая байда... http://captcha.ru/ :D
     
    1 person likes this.
  10. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    captcha.php
    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,255),rand(0,255));
        
    imagestring($im,3,$a+=15,0,$arr[$i],$color);
    }
    header("Content-type: image/jpeg");
    imagejpeg($im,'',100);
    ?>
    form.php
    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 
    "Картинка введена неверно";
        }
    }
    ?>
     
  11. Elekt

    Elekt Banned

    Joined:
    5 Dec 2005
    Messages:
    944
    Likes Received:
    427
    Reputations:
    508
    2AkyHa_MaTaTa

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