Авторские статьи Забудем про captcha

Discussion in 'Статьи' started by banned, 16 Apr 2008.

  1. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    [Intro]

    С недавнего времени я начал изучать AJAX библиотеку jQuery..
    На мой взгляд это лучшая, удобная и легкая либа для AJAX...
    Прочитав некоторые статьи, доки по либе я решил сделать так, чтобы пользователям на вашем сайте не пришлось смотреть на закорюченные символы :)

    [Start]

    Имеем форму:
    PHP:
    <form method="post" id="xek">
    Text: <input type="text" name="text" /><br/>
    <
    input type="submit" name="sub" value="Ok" />
    </
    form>
    Ну тут роботу ничего не стоит как отправлять POST запросы text=ss,sub=Ok на наш скрипт...

    А если добавить через js некую форму.....
    В хидере( Между <head> и </head>) страницы напишем следующее:

    Code:
    <script src="jquery-1.2.3.pack.js"></script>
    <script type="text/javascript">
    $(document).ready(function()
    {
        $.get("md5.php",function(hash)
        {
            $("#xek").append('<input type="hidden" name="code" value="'+hash+'" />');
        });
    });
    
    В этом коде мы делаем GET запрос (сразу при загрузке страницы с формой) к файлу md5.php, получаем оттуда данные и jQuery сам вставляет новый инпат в нашу форму на странице, но исходный код страницы при этом не изменяется..

    в md5.php мы можем выводить допустим такое:
    PHP:
    <?php
    echo md5($_SERVER['REMOTE_ADDR']).'xekxek');
    ?>
    Тем самым если робот будет отправять пост запросы через обычную форму, то скрипт его не пропустит, потому что проверить робот это или нет можно след.кодом:
    PHP:
    <?php
    if(!isset($_POST['hash']) || $_POST['hash'] != md5($_SERVER['REMOTE_ADDR']).'xekxek')) echo 'You are not human';
    ?>

    [End]
    Вы скажите, а что сложного человеку посмотреть JS код, узнать файл md5.php и ботом сначала парсить инфу оттуда?

    Ну так существует ведь http://ru.wikipedia.org/wiki/Обфускация JS кода с помощью которой вам надо обфуцировать небольшой JS код в хидере..

    Спросите вы: А разве сложно его раскодировать?
    Отвечаю также: А разве сложно его хорошо криптануть??)))​
     
    6 people like this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Либо еще лучше подключить мод реврайт и отправлять запросы на что-то типа
    PHP:
    <?php
    $_SERVER
    ['REMOTE_ADDR'].time();
    ?>
    /IP_time.jpg

    Так уже даже можно название файла не прятать т.к. пока робот зайдет на файл и отправит форму, то значения time() будут разные
     
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Либо вообще в md5.php создавать сессию с указанным выше содержимым и если форма отправляется без сессии, то робот! :)
     
    1 person likes this.
  4. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    ты забыл про безскриптовых людей.. к тому же гораздно проще давать рандомные имена полям формы еще перед генерацией странице, я кстати писал об этом ..
     
  5. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    GreenBear, да, тоже вариант, а безскриптовые люди сделать ничего не смогут если допустим сделать еще проверку по IP :)
     
  6. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    неее буду лечше на ранмоде(типа капча) сидеть,по мне эфективнее. и некие мои замороченные проверочки.
     
  7. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    исис, в том то и дело что они НИЧЕГО сделать не смогут ....
     
  8. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    GreenBear, с чего ты взял?
    Если у них включен javascript, то jquery сделает свое дело...
     
  9. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    )))))))
    а если нет ?
     
  10. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Сам факт того что ты юзаешь jQuery, или любую аяксовую либу, говорит о том, что твой сайт заточен под людей с включеным js. (А на людей с выключеным js ты в принципе забил, равно как и на любителей старых или специфических браузеров)
     
  11. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    А что мешает выяснить как сервак возвращает этот хеш и научить робота заходить на страницу и снифать его от сервера, а потом дописывать в запрос при отправке?

    З.Ы.
    Прошу прощения, что разными сообщениями.

    З.З.Ы.

    Лучше вместо запроса яваскриптом ответа с сервера, как тут:
    Code:
    <script type="text/javascript">
    $(document).ready(function()
    {
        $.get("md5.php",function(hash)
        {
            $("#xek").append('<input type="hidden" name="code" value="'+hash+'" />');
        });
    });
    
    Просто тупо зашить ещё на сервере это поле в скрипт и пройтись обфускатором. Тогда если снифать трафф, ты не получишь хеш, а получишь только страницу целиком.

    Ну и логичный вывод - Тогда, а при чём тут jQuery и аякс, если речь идёт о клиентской генерации элементов страницы яваскриптом :)))
     
    #11 Qwazar, 16 Apr 2008
    Last edited: 16 Apr 2008
    2 people like this.
  12. hackconnect

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

    Joined:
    8 Mar 2007
    Messages:
    49
    Likes Received:
    5
    Reputations:
    0
    кстати генерация рандомных имен полей неэффективна имхо - что мешает боту скачать и отпарсить форму? Да и кодить под этот сабж тоже тот еще гемор.

    носкрипт и капча :) ибо этот метод неприменим тогда :)

    ты не понял о чем речь.
     
    #12 hackconnect, 16 Apr 2008
    Last edited: 16 Apr 2008
  13. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Да ладно, он предлагает генерить сервером на странице jQuery код, который будет генерить скрытое поле которое будет передавать на сервер хеш, который будет аяксовыми методами спрашиваться у сервера.

    Фишка в том, что сначала клиенту отдаётся страница с яваскриптом, который этот запрос хеша и сгенерит, затем аяксом запрос "дай мне хеш" уйдёт на сервер, и вот после этого уже можно снифать ответ от сервера. Всё.

    Если непонятно:

    1) Серверу отдаётся страничка с яваскриптом (обработано обфускатором)
    2) Яваскрипт на клиенте запрашивает у сервера хеш-код для скрытого поля
    3) сервер возвращает хеш-код
    4) при запросе, на сервер передаётся этот хеш код
    5) они там сравниваются

    А теперь прикинь, что между 2 и 3 я включил снифер.
     
    #13 Qwazar, 16 Apr 2008
    Last edited: 16 Apr 2008
  14. hackconnect

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

    Joined:
    8 Mar 2007
    Messages:
    49
    Likes Received:
    5
    Reputations:
    0
    хм, значит я подумал что метод умнее ?)

    лучше тогда сервер тупо пусть досылает картинку и инпут.
     
  15. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Qwazar, пост #3
     
  16. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ну а что мешает спереть сессию? Если до отправки формы включили сниффер.

    Т.е. когда тебе уже пришла страница, но когда на md5.php запрос ещё не ушёл.
     
    #16 Qwazar, 16 Apr 2008
    Last edited: 16 Apr 2008
  17. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Хех..ну попробуй :)
     
  18. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    А в чём проблема зафиксировать любой траффик между клиентом и сервером??? (Если ты и есть клиент :) )
     
    #18 Qwazar, 16 Apr 2008
    Last edited: 16 Apr 2008
  19. hackconnect

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

    Joined:
    8 Mar 2007
    Messages:
    49
    Likes Received:
    5
    Reputations:
    0
    это уже такие дебри что ппц ->|
    ага, убрал уже :D

    лучше имхо то, что я предложил..
     
  20. Qwazar

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

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Ну или если оч не хочется напрягать юзера, то куда надёжнее генерить хеш ещё до того как отдаёшь страницу юзеру, потом писать его в js ещё на сервере, пройтись обфускатором и отдать клиенту. Тогда и аякс не нужен и проблем с MIM не будет :)