Популярные записи
    Календарь
    «    Апрель 2021    »
    ПнВтСрЧтПтСбВс
     1234
    567891011
    12131415161718
    19202122232425
    2627282930 
    Теги
    Реклама
    Голосование

    Как вам дизайн блога?


    Ссылки
    Архивы
    Январь 2017 (1)
    Сентябрь 2016 (1)
    Август 2016 (1)
    Июль 2016 (2)
    Май 2016 (1)
    Апрель 2016 (3)

    591-62-63

    Контакты
     

    Хак для ДЛЕ - защита от ботов

    nDiezel, Прочитало: 9 366
    27 марта 2010
    Итак, задался недавно вопросом - как защитить свой сайт от постоянно регистрирующихся на нем ботов? Сайт у меня на ДЛЕ, а это - довольно известный двиг. Поэтому на него давно уже создали ботов, которые съедают "родную" капчу и не морщатся.

    Пожалуй, расскажу как я пришел к окончательному решению данной проблемы поэтапно. hi
    (торопыги могут перейти сразу к описанию "рецепта" wink )

    1. Этап.
    Итак, сначала - я сделал свою "капчу".
    Ну, это была не капча, а эдакий "финт конем". Изменил в registration.tpl кусок кода:
    <input type="text" name="name" id='name' class="inputbox" />

    на
    <input type="text" name="name2" id='name' class="inputbox" />


    И прикрутил к регистрации java-скрипт, который просил пользователя нажать на зеленый квадратик. При нажатии - name2 менялось на name и все становилось ок.

    Как бы какая была логика - если вводить логин в поле name2 - это ничего не даст. При нажатии на кнопку "Отправить" - скрипт двига не получит логина пользователя (поскольку он обрабатывает имя name, а не name2), и выдаст ошибку.

    На практике - это не сработало.
    Поскольку (как оказалось loon ) - боты даже не считывают ваш хтмл-код. Они сразу посылают стандартные данные прямиком к нужной ДЛЕ функции.

    Почесав репу, я придумал другой способ, чтобы реализовать который пришлось немного повозиться уже с самим движком, а не только с шаблоном сайта.


    Итак, рецепт!
    Открываем файл:
    engine\modules\register.php

    Находим строчку:
    $name = $db->safesql( $parse->process( htmlspecialchars( trim( $_POST['name'] ) ) ) );

    Меняем $_POST['name'] на $_POST['her_vam_name'] (или любое другое осмысленное, или не очень, словосочетание focus )

    К registration.tpl прикручиваем скрипт, который при совершении нужного вам действия поменяет в registration.tpl имя name на прописанное вами her_vam_name (или какое вы там прописали в файле registration.tpl) и...

    Вот и все.
    Легко и просто. king


    Резюмируя
    Да, я знаю что это сопля в полете, а не защита от нормального кулхацкера.
    Но! Задача была защититься от стандартных ботов, которые не рассчитаны на какой-то конкретный сайт. Эта защита вполне работает от ботов сделанных именно под ДЛЕ. Как сказано у классиков: "Чего же боле?" rolleyes

    Для особо страждущих я сделал наглядный архив со скриптом и другими файлами.

    antibot.rar [20,4 Kb] (cкачиваний: 222)


    Чтобы поставить у себя нужно:
    1. Или заменить registration.tpl файлом из архива или в нужном вам месте в вашем registration.tpl дописать код:

    <div class="anti_bot_captcha">
       <span>Для успешной регистрации - нажмите на зеленый квадратик.<span>(Если вы этого не сделаете - будет отображена ошибка о регистрации)</span></span>
       <div id="green"><div>Спасибо, теперь - всё ок</div></div>
       <div id="red"></div>
    </div>


    2. Добавить в свой шаблон файлы из архива:
    registration.js, jquery.js, register.css,

    3. Подключить эти файлы в шаблоне main.tpl. (jquery.js должен подключаться раньше registration.js)

    Если все сделали правильно - избавитесь от ботов. sw


    Пы.Сы. Кто не может поставить себе этот хак или же хочет в нем что-то поменять - обращайтесь.
    За адекватную цену - поставлю вам все и настрою. victory
    Теги:ДЛЕ
    (27 марта 2010 01:53)
    #1 - cttr
    | Зарегистрирован: 27.03.2010 | ICQ: {icq}
    Немного манипуляций с регуляркой


    $parse = '<input type="text" name="53253253252532" id="name" class="inputbox" />';

    preg_match('/<input type="text" name="(.*)" id="name" class="inputbox" \/>/', $parse, $content);

    echo $content[1]; // содержимое поля name ( 53253253252532 )



    И я на лету определю, что у тебя там находится . Твой метод до первого программиста со слабым уровнем знаний, про средний я вообще молчу. Можно парсить формы в любом направлении.
    (27 марта 2010 01:56)
    #2 - nDiezel
    | Зарегистрирован: 4.08.2007 | ICQ: {icq}
    cttr, читай:
    Да, я знаю что это сопля в полете, а не защита от нормального кулхацкера.
    Но! Задача была защититься от стандартных ботов, которые не рассчитаны на какой-то конкретный сайт. Эта защита вполне работает от ботов сделанных именно под ДЛЕ

    --------------------
    Каждый админ - в душе немного друид.
    Он постоянно общается с деревьями...
    (27 марта 2010 19:55)
    #3 - cttr
    | Зарегистрирован: 27.03.2010 | ICQ: {icq}
    А я тебе и не говорю про какой-то конкретный сайт, любой код между <form .. > </form> будет доступен, тут нужно не в оболочке устранять проблемы, а в самом ядре
    (28 марта 2010 14:40)
    #4 - nDiezel
    | Зарегистрирован: 4.08.2007 | ICQ: {icq}
    Ядре, шмедре...
    Я вообще пхп не знаю, если на то пошло. focus

    Можешь мне хоть стотыщ аргументов выдать, рассказать что все, что я сделал - криво и любой программер взломает эту "засчиту"...

    Это все - не имеет никакого значения.
    Поскольку то, ради чего она была сделана - работает.

    У меня за три дня - ни одного бота. А раньше было по 10-15 регистраций в день.

    --------------------
    Каждый админ - в душе немного друид.
    Он постоянно общается с деревьями...
    (29 марта 2010 02:56)
    #5 - cttr
    | Зарегистрирован: 27.03.2010 | ICQ: {icq}
    да молодцом, кто спорит

    Ошибка

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
    Наверх
    Вы используете браузер криворуких программистов.Их детище - глубоко ранит мою нежную психику и напоминает о бессонных ночах и километрах кода, написанного в попытках заставить работать это убожество.

    Поэтому, если вы хотите мира во всём мире - я искренне советую вам его заменить на более достойный
    Обещаю исправиться