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

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


Arhar

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

т.е. мне надо просто удалить таблицу и выполнить запрос в базе данны (новый).....ну и фаил questions перезалить, да? остальные скрипты которыя редактиировал в версии 1 надо изменять?
Ссылка на комментарий
Поделиться на других сайтах

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

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

mySQL query error: SELECT id,question FROM wt_ibf_questions ORDER BY RAND() LIMIT 1

 

SQL error: Table 'notonen_forum.wt_ibf_questions' doesn't exist

SQL error code:

Date: 26.2.2007, 19:47

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

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

 

Warning: usort() [function.usort]: The argument should be an array in /home/notonen/domains/notone.net.ru/public_html/sources/action_admin/skin_template_bits.php on line 900

 

Warning: Invalid argument supplied for foreach() in /home/notonen/domains/notone.net.ru/public_html/sources/action_admin/skin_template_bits.php on line 912

 

раньше все создавалосью....сейчас не могу....

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

что-то сделал неправильно..

особенно внимательно с настройкой и куском

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

он должен идти после кода

			$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'reg_antispam', 'where' => "regid='".trim(addslashes($this->ipsclass->input['regid']))."'" ) );
	}

внутри функции create_account()

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

сделал.....регистрация все равно проходит без выбора вопроса

 

 

это я понял. вопросы забил заново, но они не выводятся при регистрации.

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

вот код мой:

 

}

 

$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'reg_antispam', 'where' => "regid='".trim(addslashes($this->ipsclass->input['regid']))."'" ) );

}

//antispam.question

if ($this->ipsclass->vars['questions_num'])

{

$n = $this->num_correct();

if($this->correct_answer($n)==false)

{

$form_errors['general'][] = $this->ipsclass->lang['err_reg_question'];

}

}

//antispam.question

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

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

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

 

 

все равно регистрация проходит сразу

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

вопросы не появлятся могут при значении настройки

$this->ipsclass->vars['questions_num'] = нет(0)

 

WARfromTEARS

выложи плиз свой файл register.php в архиве куда-нидь, может я и правда в инструкции что-то забыл

 

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

 

попробуй найти

if(isset($this->ipsclass->input[$s]) && $this->ipsclass->input[$s] == $row['answer'])

и заменить на

if(isset($this->ipsclass->input[$s]) and ($this->ipsclass->input[$s] == $row['answer']))

на некоторых версиях php && расценивается как-то странно, надежнее and

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

Вас не затруднит выложить архив, в котором учтены уже все изменения и дополнения.

 

Ваш мод пойдет под "Русская версия IP.Board 2.2.2 © 2007 IPS, Inc." ?

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

сейчас выложу еще раз со всеми учтенными изменениями

врядли, но если вы пришлете регистр.пхп от этой версии (заархивированный), то я посмотрю, что там можно сделать

еще одно дополнение(включено в архив после этого сообщения)

найти

			if ( $num == '92' )
		{
			$num = 93;
		}
		if ( $num == '34' )
		{
			$num = 90;
		}
		if ( $num == '39' )
		{
			$num = 65;
		}
		if ( $num == '96' )
		{
			$num = 97;
		}
		if ( $num == '60' )
		{
			$num = 61;
		}
		if ( $num == '62' )
		{
			$num = 63;
		}

добавить

			if ( $num == '47' )
		{
			$num = 48;
		}
		if ( $num == '64' )
		{
			$num = 57;
		}

 

P.S.собственно, вполне возможно, что будет работать с 2.2.2 без изменений в коде инструкции

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

нашел ошибку)

				//-----------------------------------------
			// Are they banned [EMAIL]?
			//-----------------------------------------

			if ( is_array( $banfilters['email'] ) and count( $banfilters['email'] ) )
			{
					foreach ( $banfilters['email'] as $email )
					{
							$email = str_replace( "\*", '.*' , preg_quote($email, "/") );

							if ( preg_match( "/$email/", $in_email ) )
							{
									$form_errors['email'][] = $this->ipsclass->lang['reg_error_email_taken'];
									break;
							}
					}
			}
			//antispam.question
	if ($this->ipsclass->vars['questions_num'])
	{
			$n = $this->num_correct();
			if($this->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->complete_login_form( $form_errors );
					return;
			}

неправильное место)

надо не перед

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

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

а перед

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

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

должно получится

				//-----------------------------------------
			// Check the reg_code
			//-----------------------------------------

			if ($this->ipsclass->vars['bot_antispam'])
			{
					if ( $this->ipsclass->input['regid'] == "" )
					{
							$form_errors['general'][] = $this->ipsclass->lang['err_reg_code'];
					}

					$this->ipsclass->DB->simple_construct( array( 'select' => '*',
																											  'from'   => 'reg_antispam',
																											  'where'  => "regid='".trim(addslashes($this->ipsclass->input['regid']))."'"
																							 )	  );

					$this->ipsclass->DB->simple_exec();

					if ( ! $row = $this->ipsclass->DB->fetch_row() )
					{
							$form_errors['general'][] = $this->ipsclass->lang['err_reg_code'];
					}

					if ( trim( intval($this->ipsclass->input['reg_code']) ) != $row['regcode'] )
					{
							$form_errors['general'][] = $this->ipsclass->lang['err_reg_code'];
					}

					$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'reg_antispam', 'where' => "regid='".trim(addslashes($this->ipsclass->input['regid']))."'" ) );
			}

			//antispam.question
			if ($this->ipsclass->vars['questions_num'])
			{
					$n = $this->num_correct();
					if($this->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;
			}

 

Garret подсказал хорошую комбинацию для генерации случайной строки

заменить

			$num   = rand(33, 126);

		if ( $num == '92' )
		{
			$num = 93;
		}
		if ( $num == '34' )
		{
			$num = 90;
		}
		if ( $num == '39' )
		{
			$num = 65;
		}
		if ( $num == '96' )
		{
			$num = 97;
		}
		if ( $num == '60' )
		{
			$num = 61;
		}
		if ( $num == '62' )
		{
			$num = 63;
		}
		if ( $num == '47' )
		{
			$num = 48;
		}
		if ( $num == '64' )
		{
			$num = 57;
		}

		$randqinputf .= chr( $num );

на

			//thanks to Garret
		$set = array(rand(48,57), rand(65,90) ,rand(97,122));
		$randqinputf .= chr($set[rand(0,2)]);

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

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

 

mySQL query error: SELECT id, question FROM ibf_questions ORDER BY id

 

SQL error: Table '1gb_livni.ibf_questions' doesn't exist

SQL error code:

Date: 23.2.2007, 20:25

У меня выдаёт точно такую же ошибку. Я делаю запрос, а мне пишут Ошибка SQL

 

Table 'ibf_questions' already exists, ПОМОГИТЕ, пожалуйста, самовару в юбке. Каждый день толпа ботов регистрируется, усала стирать. (((

Может я не так запрос делаю, подскажи как, пожалуйста.

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

зайди пожалуйста в раздел Утилита SQL в админке и скажи какой у тебя префикс таблиц (начало названия каждой таблицы одинаково)
Ссылка на комментарий
Поделиться на других сайтах

У меня префикс ibf

 

таблицу вроде осилила, воюю с файлами другими, с регистр. php

 

Сделала всё по инструкции уже в сотый раз, выдаёт ошибку

mySQL query error: SELECT id,question FROM wt_ibf_questions ORDER BY RAND() LIMIT 1

 

SQL error: Table 'ibrforum.wt_ibf_questions' doesn't exist

SQL error code:

Date: 28.2.2007, 3:47

 

Есть топик, что надо где-то убирать 2 раза wt (но я не поняла где это убирать). Ребят, ну ясное дело, что чайник я, но подскажите плиз. Много модов ставила сама, объясняли и ставила. :D

Такая же ошибка уже была у WARfromTEARS, но где убирать wt_ibf_ не знаю, тем более что архив установки скачала на днях, новый уже вроде. Обещали там исправить.

 

Нашла где убрать wt_ibf, ошибка ушла, но регистрация не грузится вообще, белая страница. ((( Что я не так делаю не знаю, инструкцию до дыр читаю, всё делаю, не совсем же я тормоз, уже столько раз переделывала, не идёт и всё.

 

Сняла свой вопрос, нашлись добрые люди ;)

 

Ещё раз спасибо за мод, спасли от ботов!

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

мой дурацкий локалхост просто имеет другой префикс, так что я описался (тупо скопипастил)

но в новом архиве все должно быть нормально

если возникают ошибки MySQL в этом моде, то только в результате другого префикса, здесь все слишком просто, чтобы чему-то ломатся

 

Lera

в чем была проблема, так и не поняли?

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

Задолбался уже... Чесслово!

Ребята, всем приветы! Помогите!

 

При реге вылетает вот такая ошибка:

Fatal error: Call to undefined method register::generate_qinputf() in /www/vhosts/_мой_сайт_/html/forum/sources/action_public/register.php on line 1293

 

Ошибка здесь: $qinputf = $this->generate_qinputf();

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

Вот.

Закомментил ту строчку - начала грузиться страничка, но регистрация не продолжается, т.к. вылетает уже другая ошибка. :D

	
	/*-------------------------------------------------------------------------*/
	// Calculate correct answers
	/*-------------------------------------------------------------------------*/

	function num_correct()
	{
	$this->ipsclass->DB->simple_construct( array( 'select' => 'id, answer, qinputf',
									  'from'   => 'questions',
									  'order'  => 'id'
							 )	  );
		$this->ipsclass->DB->simple_exec();

		$n = 0;

		while ($row = $this->ipsclass->DB->fetch_row() )
		{
		$s = $this->prefix.$row['qinputf'];
		if(isset($this->ipsclass->input[$s]) and ($this->ipsclass->input[$s] == $row['answer']))
			{
				$n++; 			
			}
		}

	return $n;
}

	/*-------------------------------------------------------------------------*/
	// Correct?
	/*-------------------------------------------------------------------------*/

	function correct_answer($n)
	{
		if($n >= $this->ipsclass->vars['questions_num'])
			return true;
		else
			return false;
	}

/*-------------------------------------------------------------------------*/
	// Generate Question Input Field
	/*-------------------------------------------------------------------------*/

function generate_qinputf()
{
	for ( $i = 0; $i < 6; $i++ )
	{
		//thanks to Garret
		$set = array(rand(48,57), rand(65,90) ,rand(97,122));
		$randqinputf .= chr($set[rand(0,2)]);
	}

	return $randqinputf;
}
//----------------------------------------------------------//

?>

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

да, тут неправильно

надо найти

}

?>

и вставить ПЕРЕД ним, строго перед закрывающейся скобкой }

а у тебя после закрывающейся скобки }

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


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

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

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