Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#26 2007-12-19 09:30:29

bindstream
Гость

Re: Правильная каптча

В модификации участвуют следующие файлы:

- include/functions.php
- lang/russian/common.php
- register.php
- lang/russian/register.php
- post.php

Открываем 'include/functions.php', ищем:

function dump()
{
    echo '<pre>';

    $num_args = func_num_args();

    for ($i = 0; $i < $num_args; ++$i)
    {
        print_r(func_get_arg($i));
        echo "\n\n";
    }

    echo '</pre>';
    exit;
}

После добавляем:

function mathCaptcha($input='', $sum='') {
    $length = 4;
    if (isset($_POST['req_calc'])) {
        if (is_numeric($input) && strlen($sum) == $length) {
             $math = substr(md5($input),0,$length) === $sum ? $input : null;
}
    }
    else {
        $x = rand(1, 9); $y = rand(1, 9);
        $sum = substr(md5($x+$y),0,$length);
        $math = '<p><label>'.$lang_common['CaptchaQuestion'].'</label><br />';
        $math .= $x.' + '.$y.' = ';
        $math .= '<input type="text" name="req_calc"/></p>';
        $math .= '<p><input type="hidden" name="sum" value="'.$sum.'" /></p>';
    }
    return $math;
}

Сохраняем, закрываем.

Открываем 'lang/russian/common.php', ищем:

'Posted'                =>    'Posted'    // The date/time a topic was started

После добавляем:

// Captcha
'CaptchaQuestion'        =>    'Чему будет равняться:'

Сохраняем, закрываем.

Открываем 'register.php', ищем:

<?php

    require PUN_ROOT.'footer.php';
}


else if (isset($_POST['form_sent'])

После добавляем:

 && mathCaptcha($_POST['req_calc'], $_POST['sum'])

Ищем:

$required_fields = array('req_username' => $lang_common['Username'], 'req_password1' => $lang_common['Password'], 'req_password2' => $lang_prof_reg['Confirm pass'], 'req_email1' => $lang_common['E-mail'], 'req_email2' => $lang_common['E-mail'].' 2'

После добавляем:

, 'req_calc' => $lang_register ['Calc']

Ищем:

<div class="inform">
                <fieldset>
                    <legend><?php echo $lang_prof_reg['Privacy options legend'] ?></legend>
                    <div class="infldset">
                        <p><?php echo $lang_prof_reg['E-mail setting info'] ?></p>
                        <div class="rbox">
                            <label><input type="radio" name="email_setting" value="0" /><?php echo $lang_prof_reg['E-mail setting 1'] ?><br /></label>
                            <label><input type="radio" name="email_setting" value="1" checked="checked" /><?php echo $lang_prof_reg['E-mail setting 2'] ?><br /></label>
                            <label><input type="radio" name="email_setting" value="2" /><?php echo $lang_prof_reg['E-mail setting 3'] ?><br /></label>
                        </div>
                        <p><?php echo $lang_prof_reg['Save user/pass info'] ?></p>
                        <div class="rbox">
                            <label><input type="checkbox" name="save_pass" value="1" checked="checked" /><?php echo $lang_prof_reg['Save user/pass'] ?><br /></label>
                        </div>
                    </div>
                </fieldset>
            </div>

После добавляем:
           

<div class="inform">
    <fieldset>
        <legend><?php echo $lang_register['CaptchaLegend'] ?></legend>
        <div class="infldset">
        <p><?php echo $lang_register['CaptchaInfo'] ?></p>
        <?php echo mathCaptcha() ?>
        </div>
    </fieldset>
</div>

Сохраняем, закрываем.

Открываем 'lang/russian/register.php', ищем:

'Confirm e-mail'            =>    'Подтвердите e-mail адрес'

После добавляем:

// Captcha
'Calc'                        =>    'Проверочный код',
'CaptchaLegend'                =>    'Защита от автоматической регистрации',
'CaptchaInfo'                =>    'Для того, чтобы завершить регистрацию ответьте на следующий вопрос.'

Сохраняем, закрываем.

Открываем 'post.php', ищем:

// Did someone just hit "Submit" or "Preview"?
if (isset($_POST['form_sent'])

После добавляем:

 && mathCaptcha($_POST['req_calc'], $_POST['sum'])

Ищем:

$required_fields = array('req_email' => $lang_common['E-mail'], 'req_subject' => $lang_common['Subject'], 'req_message' => $lang_common['Message']

После добавляем:

, 'req_calc' => $lang_register['Calc']

Ищем:

<?php

    while (list(, $cur_error) = each($errors))
        echo "\t\t\t\t".'<li><strong>'.$cur_error.'</strong></li>'."\n";
?>
            </ul>
        </div>
    </div>
</div>

<?php

}
else if (isset($_POST['preview'])

После добавляем:

 && mathCaptcha($_POST['req_calc'], $_POST['sum'])

Ищем:

<div class="inform">
                <fieldset>
                    <legend><?php echo $lang_common['Options'] ?></legend>
                    <div class="infldset">
                        <div class="rbox">
                            <?php echo implode('<br /></label>'."\n\t\t\t\t", $checkboxes).'<br /></label>'."\n" ?>
                        </div>
                    </div>
                </fieldset>
<?php

}

?>
            </div>

После добавляем:

<?php if ($pun_user['is_guest']) { ?>
            <div class="inform">
                <fieldset>
                <legend><?php echo $lang_register['CaptchaLegend'] ?></legend>
                <div class="infldset">
                <p><?php echo $lang_register['CaptchaInfo'] ?></p>
                <?php echo mathCaptcha() ?>
                </div>
                </fieldset>
            </div>
            <?php } ?>

Сохраняем, закрываем.

Все протестировал на работоспособность. Изменения учитывают статус пользователя - "зарегистрированный" или "гость" и выдают поля с каптчей только для последнего. Вроде, как все "по-уму".

Прошу всех позитивных РобоАдминов проверить код на дыры, т.к. я не спец. Каптча скажем - версия 1. Доработки будут. Пока не разбирал механизм выдачи message - а нужно сделать не обнуление полей каптчи, а именно вывод предупредительного сообщения об ошибке. Сейчас только ява-скрипт проверяет на наличие данных в поле каптчи... но "сценарии" можно и остановить.

Еще раз призову всех заинтересовавшихся к участию в разработке правильной матиматической каптчи.

Редактировался bindstream (2007-12-23 20:18:25)

#27 2007-12-24 00:45:08

bindstream
Гость

Re: Правильная каптча

Представленный выше вариант уже имеет несколько багов. Надо собрать все вместе, затем и опубликую. Данная каптча ставилась на форум на котором постоянно трутся СПАМ-боты. В итоге, они ее обходят. Сменил цифры на текст - не имеет значения. Есть подозрение, что они как-то читают md5.

Может ли такое быть? И что можно здесь еще придумать?

#28 2007-12-24 05:14:10

hcs
Гость

Re: Правильная каптча

Ели уж боты распознают замусореный текст, то математические операции компьютеры выполняют быстрее человека в тысячи-миллионы раз. Найти текст вокруг инпута и выделить ключевые слова в нем дело нехитрое: #([0+9]{1,3})\s+(\+)\s+([0+9]{1,3})\s+\=#
Для разнообразия в регекспе можно проверять не только математическую операцию "сложение", как это сделано у тебя, а и все другие возможные операции.
Следующим шагом в этом напрвлении стороны разработчиков каптч можно ожидать картинку с вопросом "сколько будет 2+2", вместо голого текста smile
Как временный вариант решения можно подключить java-скрипт, который в нужном месте впишет ключевой вопрос.

bindstream пишет:

Есть подозрение, что они как-то читают md5.

Он у тебя в форме прописан.

#29 2007-12-24 08:28:41

bindstream
Гость

Re: Правильная каптча

hcs пишет:

Он у тебя в форме прописан.

Я знаю. Скорректирую вопрос: "Есть подозрение, что они как-то расшифровывают md5". Но это же не возможно... типа только сервер это может сделать.

#30 2007-12-24 09:24:45

hcs
Гость

Re: Правильная каптча

bindstream, ты ставишь под сомнение способность ботов производить нехитрые математические операции? md5 расхэшировать могут, а сложить два однозначных числа - нет? smile
Проведи следственный эксперимент, вместо хэша передавай идентификатор сессии, он никак не связан с "суммой". Результат соответсвенно храни в переменной сессии и проверяй его с тем что присылает пользователь.  Можешь хранить результат в БД, например добавив поле в таблицу online. Тогда в форме не будет ни идентификатора сессии ни твоего хэша. Я понятно выразился?
Если боты и тут пройдут, значит им положить на хэш.

#31 2007-12-24 15:51:04

bindstream
Гость

Re: Правильная каптча

hcs, как бы ты написал условие в моем случае с учетом особенностей punbb, - если введенное в поле каптчи значение пустое или не равно должному... - как punbb на это должен реагировать?

Просто интересен твой вариант, - может я часть недопонимаю.

В способности порно-ботов расшифровывать хэш все-таки сомневаюсь. Думаю, здесь банальные дыры.

#32 2007-12-25 05:08:31

hcs
Гость

Re: Правильная каптча

Какие дыры? Навскидку самая элементарная - все данные передает серверу клиент, на сервере даже нет никакой защиты от банальной подмены хэша. Например злонамеренный бот, подменяет реферер (это нетрудно), вставляет в скрытое поле "sum"=md5(4), а в поле каптчи - 4, в тело сообщения всечто угодно и отправляет эту форму тебе. Что делает твой код с полученными данными каптчи?
Вобщем код не выдержитвает никакой критики.

#33 2008-01-02 10:00:20

Visman
Гость

Re: Правильная каптча

Я вот на счет #1 собщения в теме хочу сказать:
Если поле captcha_q из формы вообще убрать, а данные этого поля передавать через form_sent.
И второе: Почему бы не дописывать случайный набор символов спереди и сзади определенной длины к $qencoded при вставке в форму, а потом отрезать их при получении данных регистрации.
Затруднит ли это ботам взлом каптчи?

#34 2008-02-08 13:58:57

VirHos
Гость

Re: Правильная каптча

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

#35 2008-02-08 23:11:05

maximum
Гость

Re: Правильная каптча

VirHos пишет:

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

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

#36 2008-02-08 23:31:12

VoiD
Гость

Re: Правильная каптча

имхо это как вирусы и антивирусы, надо будет - заспамят
идеальной капчи нету

#37 2008-02-09 10:28:10

coordinator
Гость

Re: Правильная каптча

ИМХО каптча что здесь + проверка e-mail очень неплохая защита.
Смысл в том чтобы сократить кол-во возможных спаммеров, чтобы облегчить работу модерам.
В конечном счете люди противостоят людям, а не программы программам.

#38 2008-02-09 15:24:23

nobody
Гость

Re: Правильная каптча

каптча + проверка e-mail = какой в этом смысл? Лишний геморрой для юзеров, имхо, надо оставлять что-то одно. Я оставил у себя одну каптчу, потому что многим не проходит письмо с кодом активации. Да и сама активация по мылу - лишний геморрой. А боты, вроде, тьфу, тьфу, тьфу - не идут. Стоит "Image Verifycation".

#39 2008-02-09 17:39:11

maximum
Гость

Re: Правильная каптча

VoiD пишет:

имхо это как вирусы и антивирусы, надо будет - заспамят
идеальной капчи нету

А идеальная нам как раз таки и противопоказана.

nobody пишет:

каптча + проверка e-mail = какой в этом смысл? Лишний геморрой для юзеров, имхо, надо оставлять что-то одно. Я оставил у себя одну каптчу, потому что многим не проходит письмо с кодом активации. Да и сама активация по мылу - лишний геморрой. А боты, вроде, тьфу, тьфу, тьфу - не идут. Стоит "Image Verifycation".

У меня на всех форумах активация по email включена, и я не считаю это лишним, только это не для борьбы со спамом...

#40 2008-02-09 18:59:11

coordinator
Гость

Re: Правильная каптча

nobody пишет:

Я оставил у себя одну каптчу, потому что многим не проходит письмо с кодом активации.

Единственная причина оставить только CAPTCHA только если проблемы с рассылкой активации. Всегда полезно иметь реальный мейл пользователя. Для рассылки например.

#41 2008-02-09 19:34:22

hcs
Гость

Re: Правильная каптча

получать\неполучть рассылку право пользователя, если он не хочет ничего получать, то мыло бесполезно.
случай с регистрацией по мылу можно объяснить, например защитой от проникновения ботов в закрытые для гостей разделы, хотя безусловно этот способ очень прост для обхода.
какие другие случаи иметь мыло полезны?

#42 2008-02-09 19:43:06

coordinator
Гость

Re: Правильная каптча

Если пользователь подписывается на тему, то при подтверждении регистрации через e-mail 100% грантия получения письма о новом ответе в теме.
Для маленького форума не актуально, а для большого, на мой взгляд, полезно. Когда в форуме много новых сообщений, пользователи идут по рассылке в те тему, которые их волнуют.

#43 2008-02-09 19:56:57

Visman
Гость

Re: Правильная каптча

ОФФ:
А у меня даже без e-mail все равно самая правильная каптча tongue
:ОФФ
smile

#44 2008-02-09 19:59:12

nobody
Гость

Re: Правильная каптча

coordinator пишет:

Если пользователь подписывается на тему...

его проблемы, если он указал не верный мейл. К тому же, всегда можно изменить его в профиле, если нужно. К тому же с "постояльцами" связаться и узнать мыло не проблема, если очень нужно. Реальное мыло "остальных" юзеров мне зачем знать?
Потому и считаю, что по сути активация по мылу это лишняя заморочка, из-за которой, к тому же (при плохой работе почты )), можно потерять много потенциальных постояльцев.

#45 2008-02-09 20:36:38

VoiD
Гость

Re: Правильная каптча

да если надо сильно, то зарегится и с подтверждением (по себе сужу)

#46 2008-02-09 20:52:21

hcs
Гость

Re: Правильная каптча

Конечно зарегится (хотя найдется 1 из 100 который пройдет мимо), но вопрос в дружественности к пользователю. Например есть ресурсы, на которых линки скрыты от гостей. Весьма недружественный акт к посетителю. Особенно, если от него потом потребуется активация аккаунта по мылу. В довершении посетителя убъет тот факт, что ссылка оказалась дохлой. А время ушло.
Так минута за минутой у нас крадут жизнь всяческие активации по мылу. Лучше в таком случае повесить фрейм, по которому пользователю нужно кликнуть, чтобы пройти регистрацию, а в фрейме разместить ссылку на рекламодателя.

#47 2008-02-09 21:29:44

coordinator
Гость

Re: Правильная каптча

nobody пишет:

Потому и считаю, что по сути активация по мылу это лишняя заморочка,

В этом есть и обратная сторона, не будут люди на "всякий случай" регатся. Если форум большой или тематика очень строгая, это больше полезно, чем вредно.

#48 2008-02-09 22:44:44

VoiD
Гость

Re: Правильная каптча

региться на всякий случай??? smile))))))
типа мало ли, потом регистрацию закроют)

#49 2008-02-10 00:17:18

coordinator
Гость

Re: Правильная каптча

Часто незарегистрированные пользователи не могут видеть ссылки, голосовать иметь доступ в определенные разделы.
Я часто регистрируюсь, чтобы профиль был "постарше" и в закладки ссылку кидаю.

#50 2008-02-10 08:49:52

maximum
Гость

Re: Правильная каптча

hcs пишет:

какие другие случаи иметь мыло полезны?

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

Подвал доски

Под управлением FluxBB. Хостинг Hostens