Перейти к контенту

[2.3.x]Защита от ботов: вопросы при регистрации v3


Arhar

Рекомендуемые сообщения

  • Ответы 823
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Мод суперский я начал устанавливать

делал запрос, во чё пишет - Table 'ibf_questions' already exists

 

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

 

Вот на этом месте немного не могу понять

 

Найти это

function create_account()

 

 

Найти далее один раз

		//-----------------------------------------
	// CHECK 2: Any errors (duplicate names, etc)?
	//-----------------------------------------

	if ( count( $form_errors ) )
	{
		$this->show_reg_form( $form_errors );
		return;
	}

 

 

Добавить ВЫШЕ

	//antispam.question
if ($this->ipsclass->vars['questions_num'])
{
	$n = $this->ipsclass->num_correct();
	if($this->ipsclass->correct_answer($n)==false)
		{		
		$form_errors['general'][] = $this->ipsclass->lang['err_reg_question'];
	}
}
//antispam.question

 

Куда именно добавить...?

Этого чёт я вообще не могу найти...

function create_account()

 

Вот мой код вместе с тем что вставить надо было я правельно понял?

А то чёт не подходит как то

 

	{
			$form_errors['general'][] = $this->ipsclass->lang['err_reg_code'];
		}

		$this->ipsclass->DB->do_delete( 'reg_antispam', "regid='".trim($this->ipsclass->txt_alphanumerical_clean($this->ipsclass->input['regid']))."'" );
	}

//antispam.question
if ($this->ipsclass->vars['questions_num'])
{
	$n = $this->ipsclass->num_correct();
	if($this->ipsclass->correct_answer($n)==false)
		{		
		$form_errors['general'][] = $this->ipsclass->lang['err_reg_question'];
	}
}
//antispam.question
	//-----------------------------------------
	// CHECK 2: Any errors (duplicate names, etc)?
	//-----------------------------------------

	if ( count( $form_errors ) )
	{
		$this->show_reg_form( $form_errors );
		return;
	}

 

Я ещё не такой программер как вы, помогите, а.., если хоть даже это и глупый вопрос...

Меня этому ни кто не учит всё на догадках, короче я об этом ток поверхностно всё знаю...

Ссылка на комментарий
Поделиться на других сайтах

Строка 1448 в оригинале... есть там такая функция, а вы нашли видимо предыдущее включение.

 

Отредактировали правильно...

Ссылка на комментарий
Поделиться на других сайтах

13. изменение файла sources/action_public/register.php

 

А) Найти:

	var $modules	= "";

 

А) Добавить ниже:

	//antispam.question
var $prefix	   = "answer_";

 

Б) Найти:

		//-----------------------------------------
	// Replace elements
	//-----------------------------------------

 

Б) Добавить ниже:

		//antispam.question
	if ($this->ipsclass->vars['questions_num'])
	{

		$this->ipsclass->DB->query("SELECT id,question FROM ibf_questions ORDER BY RAND() LIMIT 1");
		$row = $this->ipsclass->DB->fetch_row();
		$qinputf = $this->ipsclass->generate_qinputf();
			$row['answer_input'] = "<input type=\"text\" maxlength=\"60\" size=\"30\" name=\"".$this->prefix.$qinputf."\" />";

		$question_mod = $this->ipsclass->compiled_templates['skin_register']->question_mod( $row );

		$this->ipsclass->DB->query("UPDATE ibf_questions SET qinputf='".$qinputf."' WHERE id=".$row['id']);

		$this->output = str_replace( "<!--{ANTISPAM.QUESTION}-->", $question_mod , $this->output );
	}
	//antispam.question

 

Вот до сюда всё сходица..., у меня это 1441 строка

А вот далее в этом же файле...

 

В) Найти: это у меня 1624 строка

function create_account()

 

Мой код отредоктированный

   	}

  	/*-------------------------------------------------------------------------*/
// create_account
/*-------------------------------------------------------------------------*/ 

function create_account()
//antispam.question
if ($this->ipsclass->vars['questions_num'])
{
	$n = $this->ipsclass->num_correct();
	if($this->ipsclass->correct_answer($n)==false)
		{		
		$form_errors['general'][] = $this->ipsclass->lang['err_reg_question'];
	}
}
//antispam.question
{
	//-----------------------------------------
	// INIT
	//-----------------------------------------

	if( $this->ipsclass->vars['ipbli_usertype'] == 'email' )
	{
		$this->ipsclass->input['UserName'] = $this->ipsclass->input['members_display_name'];
	}

 

В инструкции идёт далее....

 

В) Найти далее один раз:

	   //-----------------------------------------
	// CHECK 2: Any errors (duplicate names, etc)?
	//-----------------------------------------

	if ( count( $form_errors ) )
	{
		$this->show_reg_form( $form_errors );
		return;
	}

 

В) Добавить ВЫШЕ:

	//antispam.question
if ($this->ipsclass->vars['questions_num'])
{
	$n = $this->ipsclass->num_correct();
	if($this->ipsclass->correct_answer($n)==false)
		{		
		$form_errors['general'][] = $this->ipsclass->lang['err_reg_question'];
	}
}
//antispam.question

 

И вот то что написанно добавить выше я уже добавил под этот файл

В) Найти: это у меня 1624 строка

function create_account()

 

Или так как в первом сообщении это был мой первый вариант, но потом я переделал

как сейчас..., какой правельный...? подскажите

 

Блин вот проблемка ещё сомниваюсь у меня английская админка

идем в настройки - настройки безопасности и добавляем следующую настройку:

вот по английски - TOOLS&SETTINGS/Security and Privacy

правельно я думаю здесь надо добовлять...?

Ссылка на комментарий
Поделиться на других сайтах

ААААААААААААААААА...........................

Едрён батон!!!!!!!!!!!!!!!!!!!!!!!!

:D;)

 

Получилось..............!!!!!!!!!!!!!!!!

Спасибо!!! Спасибо!!! Спасибо!!!

 

Я так долго не решался поставить этот мод думал ушатаю....

Не всё получилось, пронесло............

 

Даже не знаю как выразить свою благодарность.... :):):)

Ссылка на комментарий
Поделиться на других сайтах

http://infostore.org/info/255969/suxx.JPG

 

вот поставил мод и вроде все работает...но как оказалось не все :D вот такую ошибку выдает когда пробую постить через quickbox на форуме.... можно както сделать чтоб этот мод вообще его не трогал?

Ссылка на комментарий
Поделиться на других сайтах

Можно. Читайте внимательнее) Защита от ботов: вопросы при регистрации v3
Ссылка на комментарий
Поделиться на других сайтах

quick_reply_box_open

 

 <script type="text/javascript">
<!--
var emowindow = '';
function emo_pop(){
emowindow = window.open("index.{ipb.vars['php_ext']}?act=legends&CODE=emoticons&s={ipb.session_id}","Legends","width=250,height=500,resizable=yes,scrollbars=yes"); 
}
-->
</script>
<div id="qr_open" style="display: $show; position: relative;">
<br />
<form name="REPLIER" action="{ipb.script_url}" method="post">
<input type="hidden" name="act" value="Post" />
<input type="hidden" name="CODE" value="03" />
<input type="hidden" name="f" value="$fid" />
<input type="hidden" name="t" value="$tid" />
<input type="hidden" name="st" value="{ipb.input['st']}" />
<input type="hidden" name="auth_key" value="$key,$form=""" />
<input type="hidden" name="fast_reply_used" value="1" />
{$form}
<!-- TITLE DIV -->
<div class="borderwrap">
<div class="maintitle"><{CAT_IMG}> {ipb.lang['qr_title']}</div>
<div style='padding:6px' align="center">
	<textarea onmouseover='checkselection()' id='fastreplyarea' cols="70" rows="8" name="Post" class="textarea" tabindex="1"></textarea>
	<!-- HIDDEN PASTE SELECTION QUESTION --> 
	<div id='fastreply-pastesel' align='center' style='display:none;'>
	   <input type="button" name="pastesel" onclick="pasteselection();" value="{ipb.lang['add_selected_text']}" class="button" />
	</div>
	<!-- / HIDDEN PASTE SELECTION QUESTION -->
	<br />
<if="ipb.member['auto_track'] == "" or ipb.member['auto_track'] == '0'">
<input type="checkbox" name="enabletrack" value="1" class="checkbox" /> {ipb.lang['qr_add_email']} |
</if>
<else>
<input type="checkbox" name="enabletrack" value="1" class="checkbox" checked="checked" /> {ipb.lang['qr_add_email']} |
</else>

	<input type="checkbox" name="enableemo" value="yes" class="checkbox" checked="checked" /> <a href="java script:emo_pop();">{ipb.lang['qr_add_smilie']}</a> |
	<input type="checkbox" name="enablesig" value="yes" class="checkbox" checked="checked" /> {ipb.lang['qr_add_sig']}
	<br />
	<br />
	<input type="submit" name="submit" value="{ipb.lang['qr_submit']}" class="button" tabindex="2" accesskey="s" />  
	<input type="submit" name="preview" value="{ipb.lang['qr_more_opts']}" class="button" />  
	<input type="button" name="qrc" onclick="ShowHide('qr_open','qr_closed');" value="{ipb.lang['qr_closeit']}" class="button" />
</div>
</div>
</form>
</div>

 

я видимо здесь чтото напутал :D

Ссылка на комментарий
Поделиться на других сайтах

<input type="hidden" name="fast_reply_used" value="1" />
{$form}
<!-- TITLE DIV -->

правильно

теперь справа от текта шаблона будет нарисована такая кнопочка, ее нажмешь и появится выпадающее меню

там будет графа "редактировать входящие переменные", она самая первая в меню

вот ее содержание и необходимо узнать

плюс код файла topics.php

Ссылка на комментарий
Поделиться на других сайтах

Arhar

Спасибо Вам большое за помощь! дело было в том что я незнал как редактировать вход. переменные,а просто вписал переменную $form в текст) Отличный мод,за 3 дня ниодного бота не проскочило....спасибо :D

Ссылка на комментарий
Поделиться на других сайтах

поставил на 2.2.2 и вот такая проблема, захожу регистрироваться, ставлю галочку "Я ознакомился с правилами и условиями и принимаю их" и жму кнопку "регистрация", после чего написало "ошибка базой данных", Иду в админку пишу там вопрос

http://rap-team.ru/1.jpg как видно поле с ответами и вопросом не прибавилось ? где капать ?

Ссылка на комментарий
Поделиться на других сайтах

1 - в настройке, которую добавили, есть лишний пробел в конце строки "ключ настройки"?

2 - регистрация проходит (вот сейчас, пока вопросы не появляются)?

Ссылка на комментарий
Поделиться на других сайтах

1 - в настройке, которую добавили, есть лишний пробел в конце строки "ключ настройки"?

2 - регистрация проходит (вот сейчас, пока вопросы не появляются)?

1 - нету

2 - регистрация не проходит...

Ссылка на комментарий
Поделиться на других сайтах

Отличный мод, все работает - спамм-боты отдыхают...

 

P.S. Пожелание - возможность форматировать текст защитного вопроса, что-то цветом выделить, что-то болдом :D

Может это можно и сейчас, но я полный ноль в этом - подскажите как?

Ссылка на комментарий
Поделиться на других сайтах

AleXedos

а фиг его знает, попробуй html языком писать сразу

Kamikadze1

пишет ошибку,которую мы добавили?

тогда шаблоны не доделал где-то (предположительно 8 пункт инструкции) или ошибся в register.php

Ссылка на комментарий
Поделиться на других сайтах

Подскажите пожалуйста, что я мог не так сделать - на форме быстрого ответа нет формы для ответа на вопрос, пост добавляется как обычно. Вопрос в регистрации появился и работает отлично. Если я жму на форме "Полный режим", то выдает, что "Ответ на защитный вопрос неверен. Повторите попытку." Странно... Версия форума 2.1.7.
Ссылка на комментарий
Поделиться на других сайтах

Похожая фигня. Только у меня ваще не ругается, но и не работает при попытке ответа в тему. Хоть быстро-ответом, хоть полным. Но при регистрации есть контрольный вопрос.
Ссылка на комментарий
Поделиться на других сайтах

Наверное вся проблема в том, что у меня кроме всего прочего стоит еще расширенная форма быстрого ответа от d1pro, которая кстати теперь ваще сдохла.... ну блин поставил на свою голову...

 

А теперь решение проблемки и появившаяся новая :D

 

Нашел что нужно было учесть. вот эту строку в topics.php я уже редактировал, когда ставил расширенную форму быстрого ответа от d1pro она приняла вид -

$this->output = str_replace( "<!--IBF.QUICK_REPLY_OPEN-->" , $this->ipsclass->compiled_templates['skin_topic']->quick_reply_box_open($this->topic['forum_id'], $this->topic['tid'], $show, $this->md5_check, $qr_type), $this->output );

 

Теперь чтобы добавить форму с вопросом, нужно превратить ее в:

$this->output = str_replace( "<!--IBF.QUICK_REPLY_OPEN-->" , $this->ipsclass->compiled_templates['skin_topic']->quick_reply_box_open($this->topic['forum_id'], $this->topic['tid'], $show, $this->md5_check, $qr_type,$form), $this->output );

 

Форма появилась, но проверка на правильность ответа для гостей не срабатывает, хоть пиши туда ответ, хоть нет - все равно публикуется.

Ссылка на комментарий
Поделиться на других сайтах

насчет формы dipro естесственно нужно сохранить $qr_type

там же ясно сказано, Добавить: ,$form=""

именно так

form есть строкового типа, а ни числового!

 

p.s.2 - неверно, не слушайте

изменения во всех скинах, иначе не будет работать

 

Schnapz

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

 

у меня есть догадка

 

приведите сюда код функции function Error($error) из ipsclass.php

Ссылка на комментарий
Поделиться на других сайтах

насчет формы dipro естесственно нужно сохранить $qr_type

там же ясно сказано, Добавить: ,$form=""

Да нет, добавлять в шаблон это понятно, а про топикс.пхп и fast_reply_mod потом сам догадался.

form есть строкового типа, а ни числового!
p.s.2 - неверно, не слушайте

изменения во всех скинах, иначе не будет работать

Сейчас все проверил - форма быстрого ответа пропадала только из-за недостающей переменной в строке в topics.php. $form=1 ни на что не влиял. Моя ошибка, щас сообщение поправлю чтоб никого в заблуждение не вводить.

 

Шаблоны в скинах кроме дефолтного я не трогал, да и зачем? Выбор скинов для гостей у меня закрыт, так что регистрация только с дефолтного.

 

приведите сюда код функции function Error($error) из ipsclass.php

 

пожалуйста:

 function Error($error)
{
	$override = 0;

	//-----------------------------------------
	// Showing XML / AJAX functions?
	//-----------------------------------------

	if ( $this->input['act'] == 'xmlout' )
	{
		@header( "Content-type: text/plain" );
		print 'error';
		exit();
	}

	//-----------------------------------------
	// Initialize if not done so yet
	//-----------------------------------------

	if ( $error['INIT'] == 1)
	{
		$this->quick_init();
	}
	else
	{
		$this->session_id = $this->my_session;
	}

	if ( ! is_object( $this->compiled_templates['skin_global'] ) )
	{
		$this->load_template('skin_global');
	}

	//-----------------------------------------
	// Get error words
	//-----------------------------------------

	$this->load_language("lang_error");

	list($em_1, $em_2) = explode( '@', $this->vars['email_in'] );

	$msg = $this->lang[ $error['MSG'] ];

	//-----------------------------------------
	// Extra info?
	//-----------------------------------------

	if ($error['EXTRA'])
	{
		$msg = preg_replace( "/<#EXTRA#>/", $error['EXTRA'], $msg );
	}

	//-----------------------------------------
	// Show error
	//-----------------------------------------

	$html = $this->compiled_templates['skin_global']->Error( $msg, $em_1, $em_2, 1);

	//-----------------------------------------
	// If we're a guest, show the log in box..
	//-----------------------------------------

	if ($this->member['id'] == "" and $error['MSG'] != 'server_too_busy' and $error['MSG'] != 'account_susp')
	{
		$safe_string = str_replace( '&', '&', $this->parse_clean_value($_SERVER['QUERY_STRING']) );

		$html = str_replace( "<!--IBF.LOG_IN_TABLE-->", $this->compiled_templates['skin_global']->error_log_in($safe_string), $html);
		$override = 1;
	}

Ссылка на комментарий
Поделиться на других сайтах

там еще должно быть после этого

		//-----------------------------------------
	// Update session
	//-----------------------------------------

	$this->DB->do_shutdown_update( 'sessions', array( 'in_error' => 1 ), "id='{$this->my_session}'" );

	//-----------------------------------------
	// Print
	//-----------------------------------------

	$print		   =  new display();
	$print->ipsclass =& $this;

	$print->add_output($html);

	$print->do_output( array( 'OVERRIDE' => $override, 'TITLE' => $this->lang['error_title'] ) );
}

ну да ладно, это врядли...

а приведи код из post.php (который изменяли)

типа

		//-----------------------------------------
	// Convert the code ID's into something
	// use mere mortals can understand....
	//-----------------------------------------

	$this->han_post->obj['action_codes'] = array ( '00'  => array( '0'  , 'new'	 ),
												   '01'  => array( '1'  , 'new'	 ),
												   '02'  => array( '0'  , 'reply'   ),
												   '03'  => array( '1'  , 'reply'   ),
												   '08'  => array( '0'  , 'edit'	),
												   '09'  => array( '1'  , 'edit'	),
												   '10'  => array( '0'  , 'poll'		 ),
												   '11'  => array( '1'  , 'poll'		 ),
												   '14'  => array( '0'  , 'poll_after'   ),
												   '15'  => array( '1'  , 'poll_after'   ),
												 );

	//antispam.question
	if ( $this->ipsclass->vars['questions_num'] and $this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ][0] and ($this->ipsclass->member['id'] == "" or !$this->ipsclass->member['id']))
	{
		$n = $this->ipsclass->num_correct();
		if($this->ipsclass->correct_answer($n)==false)
		{
			$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'antispam_failed' ) );
			   exit();
		}
	}		
	//antispam.question

	//-----------------------------------------								   
	// Make sure our input CODE element is legal.
	//-----------------------------------------

все также?

exit есть?

Ссылка на комментарий
Поделиться на других сайтах

все также?

exit есть?

Угу, вот код:

 

		//-----------------------------------------
	// Convert the code ID's into something
	// use mere mortals can understand....
	//-----------------------------------------

	$this->han_post->obj['action_codes'] = array ( '00'  => array( '0'  , 'new'	 ),
												   '01'  => array( '1'  , 'new'	 ),
												   '02'  => array( '0'  , 'reply'   ),
												   '03'  => array( '1'  , 'reply'   ),
												   '08'  => array( '0'  , 'edit'	),
												   '09'  => array( '1'  , 'edit'	),
												   '10'  => array( '0'  , 'poll'		 ),
												   '11'  => array( '1'  , 'poll'		 ),
												   '14'  => array( '0'  , 'poll_after'   ),
												   '15'  => array( '1'  , 'poll_after'   ),
												 );

//antispam.question
	if ( $this->ipsclass->vars['questions_num'] and $this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ][0] and ($this->ipsclass->member['id'] == "" or !$this->ipsclass->member['id']))
	{
		$n = $this->ipsclass->num_correct();
		if($this->ipsclass->correct_answer($n)==false)
		{
			$this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'antispam_failed' ) );
		   	exit();
		}
	}		
//antispam.question

 

там еще должно быть после этого

 

вот это идет

//-----------------------------------------

// Do we have any post data to keepy?

//-----------------------------------------

 

if ( $this->input['act'] == 'Post' OR $this->input['act'] == 'Msg' OR $this->input['act'] == 'calendar' )

{

if ( $_POST['Post'] )

{

$post_thing = $this->compiled_templates['skin_global']->error_post_textarea($this->txt_htmlspecialchars($this->txt_stripslashes($_POST['Post'])) );

 

$html = str_replace( "<!--IBF.POST_TEXTAREA-->", $post_thing, $html );

}

}

 

//-----------------------------------------

// Update session

//-----------------------------------------

 

$this->DB->do_shutdown_update( 'sessions', array( 'in_error' => 1 ), "id='{$this->my_session}'" );

 

//-----------------------------------------

// Print

//-----------------------------------------

 

$print = new display();

$print->ipsclass =& $this;

 

$print->add_output($html);

 

$print->do_output( array( 'OVERRIDE' => $override, 'TITLE' => $this->lang['error_title'] ) );

}

Что-то меня берут смутные подозрения, что это Ajax-мод виноват, надо будет проверить все...

Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.