» » Простое решение против спамеров

Простое решение против спамеров


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

Цель: запретить ботам регистрироваться на сайте
Решение: ввести дополнительную, простенькую проверку
Тестировалось на: DataLife Engine 7.5

И так, далее инструкция и сам код:

1) Открываем файл engine/modules/ register.php и ищем в нём (37 строку):

if( $sec_code != $sec_code_session or ! $sec_code_session ) $stop .= $lang['reg_err_19'];



Сразу после этого вставляем:

if(empty($_POST['mark'])){
          $stop .= "Выберите кружок!";
    } else {
        if($_POST['mark'] != $_SESSION['codes']){
            $stop .= "Выбран Неверный кружок! Ботам тут не место!!! :)";
        }
    }



2) Далее ищем (с 169 по 176 строки):

if( $doaction != "validating" and ! $stopregistration ) {
    
    if( $_POST['dle_rules_accept'] == "yes" ) {
        
        @session_register( 'dle_rules_accept' );
        $_SESSION['dle_rules_accept'] = "1";
    
    }


после вставляем:

// Генерируем рандомно число от 1 до 7
    $mark = mt_rand(1,7);
    $marks = array ("Первый" => "1", "Второй" => "2", "Третий" => "3", "Четвёртый" => "4", "Пятый" => "5", "Шестой" => "6", "Седьмой" => "7");
    $marks_check = array_search($mark, $marks);
    
            // Помещаем цифру в сессию
    $_SESSION['codes'] = $mark;



3) Ищем (199 - 202):

if( $config['allow_sec_code'] == "yes" ) {
        $tpl->set( '[sec_code]', "" );
        $tpl->set( '[/sec_code]', "" );
        $tpl->set( '{reg_code}', "{$lang['reload_code']}" );



Прямо перед
} else {, 

вставляем:

$tpl->set( '{mark}', "$marks_check" );



Ищем (203 - 206):

} else {
            $tpl->set( '{reg_code}', "" );
            $tpl->set_block( "'\\[sec_code\\](.*?)\\[/sec_code\\]'si", "" );
        }



после:
$tpl->set( '{reg_code}', "" ); , 

вставляем:
$tpl->set( '{mark}', "" );



4) Последний шаг, открываем файл templates/Ваш шаблон/registration.tpl и между тегами [/sec_code] и [/registration], вставляете:


 Дополнительная защита от спамеров
                            
                            
                              
                              Если вы Человек, то выберите {mark} кружок!
                            
                            
                              Выберите кружок:
                              1
                2 3
                4 5
                6 7




Автор: infocean

Комментарии

а на свежих (8.2, 8.3) работает?

TipTop

Администраторы 28 ноября 2009 23:44
michael22,Должно работать там нечего такого замудрого нет winked
Неа, не работает, кружки не отображаются, где отметить нужно... блин, теперь загребусь убирать код =_=

Если найдете, как поправить, отпишите 482531742, а то все перепробовал(
ну как? на 8.3 пашет?
wink вот еще бы OpenID бы с Gravatar в коментах выводился.. было бы супер
последнее действие

<tr>
<td colspan="2" height="25"><strong>Дополнительная защита от спамеров</strong></td>
</tr>
<tr>
<td style="width: 130px; height:25px"></td>
<td>Если вы Человек, то выберите {mark} кружок!</td>
</tr>
<tr>
<td style="width: 130px; height:25px">Выберите кружок:</td>
<td>1<input name="mark" type="radio" value="1" />
2<input name="mark" type="radio" value="2" /> 3<input name="mark" type="radio" value="3" />
4<input name="mark" type="radio" value="4" /> 5<input name="mark" type="radio" value="5" />
6<input name="mark" type="radio" value="6" /> 7<input name="mark" type="radio" value="7" /></td>
</tr>
нА 9.2 не работает пишет заместь цифры {mark}

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Личные сообщения

Ваши переписки