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

AntiBrute v1.1


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

Мод: AntiBrute v1.1

Категория: Моды

Совместимость: 2.0.x

Описание:

Этот хак в какой-то степени является защитой от брутфорса (метода перебора пароля).

После указанного числа попыток, в случае неправильного ввода пароля предлагает ввести код безопасности.

Идея создания возникла после установки мода D2-Lock Account After X Failed Login Attempts 1, который не удовлетворил потребностей и оказался не удобным.

 

Версия 1.1 изменения:

1. Исправлены ошибки.

2. Добавлена функция удаления логов антибрута через менеджер задач.

 

Подробнее...

Скачать

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

Скачал, сегодня вечером установлю.

А если у меня другой префикс, просто поменять префикс в запросе?

И это получается идет добавление вообще совершенно новой таблицы?

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

А если у меня другой префикс, просто поменять префикс в запросе?

И это получается идет добавление вообще совершенно новой таблицы?

На оба твоих вопроса ответ Да.

 

Когда будете смотреть пример введите 4 раза любой неправильный пароль к любому существующему нику.

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

Понял все, кроме этого:

Открыть lang\russian\lang_global.php
Найти:

<?php

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

$lang['no_reg_code']  =  "Вы не ввели код безопасности.";
$lang['err_reg_code']  =  "Вы ввели неверный код безопасности, повторите снова.";

Открыть: <===== ЧТО ОТКРЫТЬ???????
После последней ф-ции function (ShowForm($message="",$referer="")) вставить:
//===========================================================================
// antibrute
//===========================================================================
function antibrute($regid="") {

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

kolobochek, нет используется стандартная функция, такая же как и при регистрации[1131380374:1131381149]xetter, прошу прощения, видно торопился

Открыть: skin_cache\номер_скина\skin_register.php

 

Обновил версию до 1.1

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

Самое обидное, что я в skin_register.php ничего описанного не нашел :D

Форум 2.0.1

Ты ничего не перепутал?

Может быть файл skin_login.php?

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

Теперь следующая засада:

Fatal error: Call to undefined function: antibrute() in /home/www/ssn/fot/ibp/sources/login.php on line 400

Все проверил - сделано по инструкции.

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

Думаю надо так

 

Заходим Управление шаблонами -> Вход в систему

Редактировать блок ShowForm

Найти:

	  <td width='50%'><strong>{ipb.lang['enter_pass']}</strong></td>
  <td width='50%'><input type='password' size='25' name='PassWord' class='forminput' /></td>
 </tr>
   </table>
 </fieldset>

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

	<!--{LOG.ANTIBRUTE}-->

Сохранить блок.

 

В этом же разделе создаем новый фрагмент

 

Название фрагмента шаблона: antibrute

Входящие переменные: $regid=""

Группа для фрагмента: skin_login

Код фрагмента:

<br />
<input type='hidden' name='regid' value='$regid' />
<fieldset>
<legend><strong>Подтверждение кода безопасности</strong></legend>
<table width='100%' cellpadding='4' cellspacing='0'>
<tr>
  <td width='1%' style='line-height:120%'>
 Введите 6 числовых знаков кода, отображённых в виде изображения.
 <input type='text' size='25' maxlength='32' name='reg_code' class='forminput' />
  </td>
  <td align='center'><img src='{$ibforums->base_url}act=Login&CODE=image&rc={$regid}' border='0' alt='Loading Image' /></td>
</tr>
</table>
</fieldset>

 

Сохраняем всё

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

Сам мод я пока не смотрел, но думаю поставить.

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

 

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

 

Заранее спасибо.

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

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

Могу добавить ф-цию в частном порядке, за вознаграждение.

 

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

И что потом, кого будет наказывать админ?

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

  • 6 месяцев спустя...
  • 2 месяца спустя...

Думаю надо добавить "изменения блока ShowForm" в основное описание мода, ибо без этого мод не работает :D

 

А так мод супер) Респект.

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

изменения блока ShowForm

Это где такое? Честна описание установки быстро писал не думая:D

P.S. Скоро версия обновится.

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

  • 9 месяцев спустя...

В общем, попытался я переделать на версию 2.1.7

Но не чего неполучилось помогите если сможете :D

antibrute.php

<?php

if ( !defined( 'IN_IPB' ) )
{
print "<h1>Некорректный адрес</h1>Вы не имеете доступа к этому файлу напрямую. Если вы недавно обновляли форум, вы должны обновить все соответствующие файлы.";
exit();
}

class antibrute
{
	  var $ipsclass;

var $data = 0;
var $member;
var $used = 0;

function get_attempts_used()
{
$r = $this->ipsclass->DB->simple_exec_query(array('select' => 'attempts, time', 'from' => 'antibrute', 'where' => "mid='".$this->ipsclass->member['id']."' AND ip='".$this->ipsclass->ip_address."'"));
	if (!$this->ipsclass->DB->get_num_rows())
	{
		return;
	}

	$this->used = intval($r['attempts']);
}

function check_account()
{
	if ($this->used >= $this->ipsclass->vars['attempts'])
	{
		$this->data = 1;
	}
}

function increment_attempts()
{
	$r = $this->ipsclass->DB->simple_exec_query(array('select' => 'attempts, time', 'from' => 'antibrute', 'where' => "mid='".$this->ipsclass->member['id']."' AND ip='".$this->ipsclass->ip_address."'"));
	if (!$this->ipsclass->DB->get_num_rows())
	{
		$this->ipsclass->DB->do_insert('antibrute', array('mid' => $this->ipsclass->member['id'], 'ip' => $this->ipsclass->ip_address, 'attempts' => '1', 'time' => time()));
		return;
	}		

	if ($this->used < $this->ipsclass->vars['attempts'])
	{
		$this->ipsclass->DB->simple_exec_query(array('update' => 'antibrute', 'set' => 'attempts=attempts+1', 'where' => "mid='".$this->ipsclass->member['id']."' AND ip='".$this->ipsclass->ip_address."'"));
		$this->used++;
	}
}

function clear()
{
	$this->used = 0;
	$this->data = 0;
	$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'antibrute', 'where' => "mid='".$this->ipsclass->member['id']."' AND ip='".$this->ipsclass->ip_address."'"));
}
}
?>

Readme.txt

Создать таблицу: 

CREATE TABLE `ibf_antibrute` (
 `id` mediumint(8) NOT NULL auto_increment,
 `mid` mediumint(8) NOT NULL default '0',
 `ip` varchar(16) NOT NULL default '',
 `attempts` tinyint(10) NOT NULL default '0',
 `time` int(10) NOT NULL default '0',
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM;

***
Загрузить файл antibrute.php в папку sources/lib/

Открыть sources\login.php

Найти:

var $modules	= "";

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

var $ab = 0;

***

Найти:

  		case '06':
			$this->delete_cookies();
			break;
Добавить ниже:

		case 'image':
			$this->show_image();
			break;

***

Найти:

/*-------------------------------------------------------------------------*/
// LOG IN FORM
/*-------------------------------------------------------------------------*/

function log_in_form($message="")

Добавить выше:
/*-------------------------------------------------------------------------*/
	// ANTIBRUTE																/
	/*-------------------------------------------------------------------------*/

function show_image()
{
 	if ( $this->ipsclass->input['rc'] == "" )
	{
		return false;
	}

	// Get the info from the db

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

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

	if ( ! $row = $this->ipsclass->DB->fetch_row() )
	{
		return false;
	}

	$this->ipsclass->show_gd_img($row['regcode']);


}
***

Найти:

$this->output .= $this->ipsclass->compiled_templates['skin_login']->ShowForm( $this->ipsclass->lang['please_log_in'], htmlentities(urldecode($_SERVER['HTTP_REFERER'])), $extra_form );

Добавить ниже:
	//------------------------------
	// ANTIBRUTE
	//------------------------------

	if ( $this->ab == 1 )
	{
		$regid = md5( uniqid(microtime()) );
		mt_srand ((double) microtime() * 1000000);
		$reg_code = mt_rand(100000,999999);
		$this->ipsclass->DB->do_insert( 'reg_antispam', array (
									   'regid'	  => $regid,
									   'regcode'	=> $reg_code,
									   'ip_address' => $this->ipsclass->ip_address,
									   'ctime'	  => time(),
						   )	   ); 
	$this->output .= str_replace( "<!--{LOG.ANTIBRUTE}-->", $this->ipsclass->compiled_templates['skin_login']->antibrute($regid), $extra_form );
	}

***

Найти:

	//------------------------------
	// Check auth
	//------------------------------

Добавить выше:
	//------------------------------
	// ANTIBRUTE
	//------------------------------
	require_once(ROOT_PATH.'sources/lib/antibrute.php');
	$this->antibrute = new antibrute();
	$this->antibrute->member =& $member;
	$this->antibrute->get_attempts_used();
	$this->antibrute->check_account();
	if ( $this->antibrute->data == 1){
	if ($this->ipsclass->input['regid'] == "")
	{
		$this->ab = 1;
		$this->log_in_form('no_reg_code');
		return;
	}
	$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() )
	{
		$this->ab = 1;
		$this->log_in_form('err_reg_code');
		return;
	}

	if ( trim( intval($this->ipsclass->input['reg_code']) ) != $row['regcode'] )
	{
		$this->ab = 1;
		$this->log_in_form('err_reg_code');
		return;
	}

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

***

Найти:

	if ( $this->han_login->return_code != 'SUCCESS' )
	{
		$this->log_in_form( 'wrong_auth' );
	}
Заменить на:

	if ( $this->han_login->return_code != 'SUCCESS' )
	{
		$this->antibrute->increment_attempts();
		if ( $this->antibrute->used == $this->ipsclass->vars['attempts'])
		$this->ab = 1;
		$this->log_in_form( 'wrong_auth' );
	}
	$this->antibrute->clear();

Открыть lang\russian\lang_global.php
Найти:

Найти:
);
?>

Добавить выше:

'no_reg_code'  =  "Вы не ввели код безопасности.",
'err_reg_code'  =  "Вы ввели неверный код безопасности, повторите снова.",

Как изменять скины описано в этой теме

вобщем я не могу понять в чем ошибка

При входе на форум выскакивает ошибка в строке 19

$r = $this->ipsclass->DB->simple_exec_query(array('select' => 'attempts, time', 'from' => 'antibrute', 'where' => "mid='".$this->ipsclass->member['id']."' AND ip='".$this->ipsclass->ip_address."'"));

файла antibrute.php

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

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

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

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