Собственный текстовый антиспам

Автор Jerry, 24 апреля 2008, 20:40:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Jerry

Нужен был фильтр ботов при регистрации без GD модуля.
Хотел сделать вопрос "сколько будет 3+5?". Добавил в Register.Template.php
<td width="40%">
<b>', "Сколько будет 3+5?", '</b>
<div class="smalltext">', "Защита от ботов", '</div>
</td>
<td>
<input type="text" name="ttt1" size="20" maxlength="2" />
</td> </td>

(после поля с паролем).
Затем в Sources/Register.php добавил после этого:
// !!! Separate the sprintf?
if (preg_match('~^[0-9A-Za-z=_+\-/][0-9A-Za-z=_\'+\-/\.]*@[\w\-]+(\.[\w\-]+)*(\.[\w]{2,6})$~', stripslashes($_POST['new_email'])) == 0)
fatal_error(sprintf($txt[500], htmlspecialchars($_POST['new_email'])), false);

Вот это:

if ($_POST['ttt1'] != '8')
fatal_error(sprintf("SPAM Bot!!!", htmlspecialchars($_POST['ttt1'])), false); // AntiSpam Protection

Но регистрация всеравно работает при оставлении поля с вопросом пустым! Я точно что-то забыл. Что надо сделать? Вроде все созданные в таблицы поля сами передаются в POST.

Mavn

в smf 2.0 реализован функционал для добавления своих вопросов! зачем городить огород?
SimpleMachines Russian Community Team
п.1 Пройду курсы гадалок для определения исходного кода по скриншоту.

п.2 У вас нет желания читать правила раздела, у меня нет желания одобрять темы, которые не соответствуют этим правилам.


Jerry

#3
На SMF2 переехать не могу из-за мода SMFSHop.
digger, спасибо. Но isset только проверит существование. Это моможет, но в другом случае. Регистрация же проходила не только при пропуске переменной, но и при задании неверного значения (например "5").
А еще, только что увидел, что засунул моё сравнение внутрь другого сравнения, даже не посмотрев, когда писал - ступил я немного.
В любом случае, isset поможет, если вдруг переменная пуста. Спасибо. :)

Добавлено:
Проверил, всеравно пропускает регистрацию. "Большое спасибо за регистрацию. Через несколько минут Вы ...". Может лучше добавлять код еще выше?
Только что нашел еще это:
// Collect all extra registration fields someone might have filled in.
$possible_strings = array(
'websiteUrl', 'websiteTitle',
'AIM', 'YIM',
'location', 'birthdate',
'timeFormat',
'buddy_list',
'pm_ignore_list',
'smileySet',
'signature', 'personalText', 'avatar',
'lngfile',
'secretQuestion', 'secretAnswer',
);
$possible_ints = array(
'pm_email_notify',
'notifyTypes',
'ICQ',
'gender',
'ID_THEME',
);
$possible_floats = array(
'timeOffset', 'referredby',
'referredon',
);
$possible_bools = array(
'notifyAnnouncements', 'notifyOnce', 'notifySendBody',
'hideEmail', 'showOnline',
);

Но вроде в этот массив добавлять не обязательно. Посмотрел на smf org, нашел пример 2-х полей e-mail с проверкой равенства. Там сделано точно, как у меня, 2 куска, никуда ничего не добавили, а с fatal_lang_error остановили регистрацию.[/s]

Извените, я просто опять запихнул код не туда. Теперь он проверяется сразу и в нужном месте, всё ок. :) Спасибо всем.

Ramzesito

Цитата: Sikes от 24 апреля 2008, 22:32:45
Извените, я просто опять запихнул код не туда. Теперь он проверяется сразу и в нужном месте, всё ок. :) Спасибо всем.

расскажи плиз другим, куда и что надо ставить, чтобы не регились боты
Sportgen.ru - Велосипед, лыжи и бег в Обнинске и Калужской области

Lysyj


AddSense

Автор будь добр расскажи что и как нужно делать как в первом посте ты это сделал.
Запутаться посторонним людям в ваших рассуждениях очень легко.