Магазин
Правила Ответы на вопросы Конфиденциальность
Магазин
Правила Ответы на вопросы Конфиденциальность
  • Быстрые действия Ярлыки
    Общие действия
    Связаться с администрацией
    • Бот

       

Минимоды и хаки для phpBB3

  • Список форумов
  • phpBB 3.0
  • Другие моды для phpBB3
  • Минимоды и хаки для phpBB3

Бан поисковых ботов на форуме phpBB3

Как забанить/запретить поискового бота или определённый браузер на форуме phpBB3

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

18 сообщений
  • 1
  • 2
  • След.
Просмотры: 3393 • 
Аватара пользователя
PPK
Администратор
Сообщения: 10554
Зарегистрирован: 21 мар 2009, 17:13
Сообщение 03 окт 2012, 14:24
В phpBB3 есть два способа (манипуляции на уровне сервера не рассматриваем) ограничить доступ бота к форуму:

а. С помощью файла robots.txt (как и для любого другого форума/сайта)
б. Добавить бота в адм. разделе и отключить права на просмотр/чтение форумов

Недостатки первого варианта в том, что боты могут игнорировать этот файл или директивы в нём и синтаксис этого файла не всем "понятен" даже с инструкциями, недостатки второго варианта в том, что ограничения распространяются сразу на всех ботов, т.е. мы либо ограничиваем доступ всем ботам, либо определяем как ботов только определённых из них, остальные боты будут иметь права гостей, далее мод который позволяет полностью запретить просмотр форума только определённым ботам(браузерам)

1. В phpmyadmin выполнить (если префикс таблиц не phpbb_ - заменить на свой):

Код: Выделить всё

ALTER TABLE  `phpbb_bots` ADD  `bot_banned` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT  '0';

INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('bot_banned', '0', '0'), ('bot_banned_text', '', '0');
2. Переделать файлы:

adm/style/acp_bots.html после

Код: Выделить всё

	<dl>
		<dt><label for="bot_ip">{L_BOT_IP}:</label><br /><span>{L_BOT_IP_EXPLAIN}</span></dt>
		<dd><input name="bot_ip" type="text" id="bot_ip" value="{BOT_IP}" maxlength="255" /></dd>
	</dl>
добавить

Код: Выделить всё

	<dl>
		<dt><label for="bot_banned">{L_BOT_BANNED}:</label></dt>
		<dd><select id="bot_banned" name="bot_banned">{S_BANNED_OPTIONS}</select></dd>
	</dl>
после

Код: Выделить всё

		<th>{L_BOT_LAST_VISIT}</th>
		<th colspan="3">{L_OPTIONS}</th>
		<th>{L_MARK}</th>
добавить

Код: Выделить всё

		<th>{L_BOT_BANNED}&nbsp;[<a title="{L_SELECT_ALL}" href="#" onclick="$('.bot_ban').val(1);">+</a>/<a title="{L_UNSELECT_ALL}" href="#" onclick="$('.bot_ban').val(0);">-</a>]</th>
после

Код: Выделить всё

			<td style="text-align: center;">&nbsp;<a href="{bots.U_EDIT}">{L_EDIT}</a>&nbsp;</td>
			<td style="text-align: center;">&nbsp;<a href="{bots.U_DELETE}">{L_DELETE}</a>&nbsp;</td>
			<td style="text-align: center;"><input type="checkbox" class="radio" name="mark[]" value="{bots.BOT_ID}" /></td>
добавить

Код: Выделить всё

			<td style="text-align: center;"><select name="bot_banned[{bots.BOT_ID}]" class="bot_ban"><option value="1"<!-- IF bots.BOT_BANNED --> selected="selected"<!-- ENDIF --> />{L_YES}</option><option value="0"<!-- IF not bots.BOT_BANNED --> selected="selected"<!-- ENDIF --> />{L_NO}</option></select></td>
includes/acp/acp_board.php перед

Код: Выделить всё

						'legend2'				=> 'ACP_LOAD_SETTINGS',
						'load_birthdays'		=> array('lang' => 'YES_BIRTHDAYS',			'validate' => 'bool',	'type' => 'radio:yes_no', 'explain' => true),
добавить

Код: Выделить всё

						'bot_banned'		=> array('lang' => 'BOT_BANNED',		'validate' => 'string',		'type' => 'text:1:1', 'explain' => true),
						'bot_banned_text'		=> array('lang' => 'BOT_BANNED_TEXT',		'validate' => 'string',		'type' => 'textarea:5:3', 'explain' => true),
includes/acp/acp_bots.php после

Код: Выделить всё

		$action = request_var('action', '');
		$submit = (isset($_POST['submit'])) ? true : false;
		$mark	= request_var('mark', array(0));
добавить

Код: Выделить всё

		$bot_banned	= request_var('bot_banned', array(0));
перед

Код: Выделить всё

			case 'delete':
				if ($bot_id || sizeof($mark))
				{
добавить

Код: Выделить всё

			case 'bot_banned':
				if (sizeof($bot_banned))
				{

					foreach($bot_banned as $k => $v)
					{
						$k=intval($k);
						$v=$v ? 1 : 0;
						$sql = 'UPDATE ' . BOTS_TABLE . "
							SET bot_banned = '{$v}'
							WHERE bot_id='{$k}'";
						$db->sql_query($sql);
					}
				}

				$cache->destroy('_bots');
			break;
после

Код: Выделить всё

					'bot_agent'		=> request_var('bot_agent', ''),
					'bot_ip'		=> request_var('bot_ip', ''),
					'bot_active'	=> request_var('bot_active', true),
добавить

Код: Выделить всё

					'bot_banned'	=> request_var('bot_banned', false),
после

Код: Выделить всё

								'user_id'		=> (int) $user_id,
								'bot_name'		=> (string) $bot_row['bot_name'],
								'bot_active'	=> (int) $bot_row['bot_active'],
добавить

Код: Выделить всё

								'bot_banned'	=> (int) $bot_row['bot_banned'],
после

Код: Выделить всё

							$sql = 'UPDATE ' . BOTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', array(
								'bot_name'		=> (string) $bot_row['bot_name'],
								'bot_active'	=> (int) $bot_row['bot_active'],
добавить

Код: Выделить всё

								'bot_banned'	=> (int) $bot_row['bot_banned'],
после

Код: Выделить всё

				$_options = array('0' => 'NO', '1' => 'YES');
				foreach ($_options as $value => $lang)
				{
					$selected = ($bot_row['bot_active'] == $value) ? ' selected="selected"' : '';
					$s_active_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
				}
добавить

Код: Выделить всё

				$s_banned_options = '';
				$_options = array('0' => 'NO', '1' => 'YES');
				foreach ($_options as $value => $lang)
				{
					$selected = ($bot_row['bot_banned'] == $value) ? ' selected="selected"' : '';
					$s_banned_options .= '<option value="' . $value . '"' . $selected . '>' . $user->lang[$lang] . '</option>';
				}
после

Код: Выделить всё

					'BOT_AGENT'		=> $bot_row['bot_agent'],

					'S_EDIT_BOT'		=> true,
					'S_ACTIVE_OPTIONS'	=> $s_active_options,
добавить

Код: Выделить всё

					'S_BANNED_OPTIONS'	=> $s_banned_options,
заменить

Код: Выделить всё

		$_options = array('activate' => 'BOT_ACTIVATE', 'deactivate' => 'BOT_DEACTIVATE', 'delete' => 'DELETE');
на

Код: Выделить всё

		$_options = array('activate' => 'BOT_ACTIVATE', 'deactivate' => 'BOT_DEACTIVATE', 'delete' => 'DELETE', 'bot_banned' => 'BOT_BANNED');
заменить

Код: Выделить всё

		$sql = 'SELECT b.bot_id, b.bot_name, b.bot_active, u.user_lastvisit
на

Код: Выделить всё

		$sql = 'SELECT b.bot_id, b.bot_name, b.bot_active, b.bot_banned, u.user_lastvisit
перед

Код: Выделить всё

				'BOT_NAME'		=> $row['bot_name'],
				'BOT_ID'		=> $row['bot_id'],
				'LAST_VISIT'	=> ($row['user_lastvisit']) ? $user->format_date($row['user_lastvisit']) : $user->lang['BOT_NEVER'],
добавить

Код: Выделить всё

				'BOT_BANNED' => $row['bot_banned'] ? true : false,
includes/cache.php заменить (встречается 3 раза)

Код: Выделить всё

					$sql = 'SELECT user_id, bot_agent, bot_ip
на

Код: Выделить всё

					$sql = 'SELECT user_id, bot_agent, bot_ip, bot_banned, bot_id
заменить

Код: Выделить всё

				$bots[] = $row;
на

Код: Выделить всё

				$bots[$row['bot_id']] = $row;
includes/session.php заменить

Код: Выделить всё

	function session_begin($update_session_page = true)
	{
		global $phpEx, $SID, $_SID, $_EXTRA_URL, $db, $config, $phpbb_root_path;
на

Код: Выделить всё

	function session_begin($update_session_page = true)
	{
		global $phpEx, $SID, $_SID, $_EXTRA_URL, $db, $config, $phpbb_root_path, $cache;
после

Код: Выделить всё

		* bot, act accordingly
		*/
		$bot = false;
добавить

Код: Выделить всё

		$bot_id=0;
после

Код: Выделить всё

			if ($row['bot_agent'] && preg_match('#' . str_replace('\*', '.*?', preg_quote($row['bot_agent'], '#')) . '#i', $this->browser))
			{
				$bot = $row['user_id'];
добавить

Код: Выделить всё

				$bot_id=$row['bot_id'];
после

Код: Выделить всё

					if (strpos($this->ip, $bot_ip) === 0)
					{
						$bot = (int) $row['user_id'];
добавить

Код: Выделить всё

						$bot_id=$row['bot_id'];
перед

Код: Выделить всё

		// If our friend is a bot, we re-assign a previously assigned session
		if ($this->data['is_bot'] && $bot == $this->data['user_id'] && $this->data['session_id'])
добавить

Код: Выделить всё

		if($this->data['is_bot'] && $config['bot_banned'] && $bot_id && isset($active_bots[$bot_id]['bot_banned']) && $active_bots[$bot_id]['bot_banned'])
		{
			if(stristr($_SERVER['REQUEST_URI'], "ucp.{$phpEx}")===FALSE && $config['bot_banned']==1)
			{
				header("Location: ".append_sid("{$phpbb_root_path}ucp.{$phpEx}", 'mode=login'));
				exit();
			}
			else if($config['bot_banned']==2)
			{
				//$db->sql_query('DELETE FROM ' . SESSIONS_TABLE . ' WHERE session_user_id = ' . $this->data['user_id']);
				trigger_error($config['bot_banned_text'] ? $config['bot_banned_text'] : 'Sorry, this browser banned on forum.');
			}
		}
после

Код: Выделить всё

						$this->data['is_bot'] = (!$this->data['is_registered'] && $this->data['user_id'] != ANONYMOUS) ? true : false;
						$this->data['user_lang'] = basename($this->data['user_lang']);
добавить

Код: Выделить всё

						if($config['bot_banned']==2)
						{
							$bot = false;
							$bot_id=0;
							$active_bots = $cache->obtain_bots();

							foreach ($active_bots as $row)
							{
								if ($row['bot_agent'] && preg_match('#' . str_replace('\*', '.*?', preg_quote($row['bot_agent'], '#')) . '#i', $this->browser))
								{
									$bot = $row['user_id'];
									$bot_id=$row['bot_id'];
								}

								// If ip is supplied, we will make sure the ip is matching too...
								if ($row['bot_ip'] && ($bot || !$row['bot_agent']))
								{
									// Set bot to false, then we only have to set it to true if it is matching
									$bot = false;

									foreach (explode(',', $row['bot_ip']) as $bot_ip)
									{
										$bot_ip = trim($bot_ip);

										if (!$bot_ip)
										{
											continue;
										}

										if (strpos($this->ip, $bot_ip) === 0)
										{
											$bot = (int) $row['user_id'];
											$bot_id=$row['bot_id'];
											break;
										}
									}
								}

								if ($bot)
								{
									break;
								}
							}
							if($bot_id && isset($active_bots[$bot_id]['bot_banned']) && $active_bots[$bot_id]['bot_banned'])
							{
								//$db->sql_query('DELETE FROM ' . SESSIONS_TABLE . ' WHERE session_user_id = ' . $this->data['user_id']);
								trigger_error($config['bot_banned_text'] ? $config['bot_banned_text'] : 'Sorry, this browser banned on forum.');
							}
						}
language/ru/acp/board.php в самом конце перед

Код: Выделить всё

));

?>
добавить

Код: Выделить всё

	'BOT_BANNED' => 'Бан ботов',
	'BOT_BANNED_EXPLAIN' => 'Включить бан поисковых ботов на форуме, 0 - отключить, 1 - включить частично (если пользователь определён как бот, для доступа необходимо будет войти на форум под своей учётной записью), 2 - включить полностью (все страницы форума будут недоступны)',
	'BOT_BANNED_TEXT' => 'Сообщение для забаненных ботов',
	'BOT_BANNED_TEXT_EXPLAIN' => ' Если число в предыдущей опции равно 2 - отображать указанный текст сообщения для бота (по молчанию будет отображаться сообщение: <em>Sorry, this browser banned on forum.</em>)',
language/ru/acp/bots.php в самом конце перед

Код: Выделить всё

));

?>
добавить

Код: Выделить всё

	'BOT_BANNED' => 'Запретить',
	'SELECT_ALL' => 'Да',
	'UNSELECT_ALL' => 'Нет',
3. Очистить кеш, настроить опции (адм. раздел - вкладка Общие - Функции конференции), отметить ботов как забаненных (адм. раздел - вкладка Система - Поисковые боты - в колонке Запретить: выбрать нужных ботов, в форме справа снизу выбрать: Запретить - Отправить)

4. Если число в опции Бан ботов равно 1 - при определении бота как забаненного необходима очистка всех сессий на форуме (адм. раздел - вкладка Общие - Очистить все сессии) иначе, бан будет действовать только после истечения срока действия текущей сессии

5. Как уже написано выше, можно банить не только ботов, но и определённые браузеры на форуме, процесс точно такой-же как и для ботов, нужно добавить в раздел Поисковые боты нужный браузер (его UserAgent) и отметить его как запрещённого.
--
Скриншоты:

Опции в адм. разделе


Редактирование/создание бота


Список ботов


Результат посещения
PPK
Romnik
Пользователь
Сообщения: 5
Зарегистрирован: 22 окт 2012, 09:32
Сообщение 23 окт 2012, 10:09
В коде ошибка.
В админке в общем списке ботов при выборе в выпадающем меню "запретить" - удаляет.
Romnik
Аватара пользователя
PPK
Администратор
Сообщения: 10554
Зарегистрирован: 21 мар 2009, 17:13
Сообщение 23 окт 2012, 10:19
перепробовал все варианты - НЕ удаляет.
PPK
Romnik
Пользователь
Сообщения: 5
Зарегистрирован: 22 окт 2012, 09:32
Сообщение 23 окт 2012, 13:45
Перепроверил установку - всё точно по инструкции, в правках ошибки нет.
В "Настройка бота" всё работает правильно, там и баню.

Первым делом забанил:
Название бота: Ezooms [Bot]
Соответствие агенту: Ezooms/1.0

Название бота: Ahrefs.com [Bot]
Соответствие агенту: AhrefsBot/4.0

Ещё советую спам-бот Xrumer добавить в список ботов и соответственно отправить его в читатели, чтобы не спамил.
Название бота: Xrumer [Spam-Bot]
Соответствие агенту: xpymep.exe
Romnik
Аватара пользователя
serrrios
Донатор
Сообщения: 1532
Зарегистрирован: 29 май 2009, 20:22
Сообщение 23 окт 2012, 20:12
Один вопрос....ЗАЧЕМ? Кому мешает лишняя индексация??
Насчет хрумера(и всей подобной хераты) - капча рулет, контрольный вопрос рулит, прямые руки не из жопы тоже несут положительный фактор..
http://aniproject.ru - перспектива... велком епта..
http://www.ppkbb3cker.ru/viewtopic.php?f=35&t=1042 - мои платные услуги по трекеру.
serrrios
Romnik
Пользователь
Сообщения: 5
Зарегистрирован: 22 окт 2012, 09:32
Сообщение 23 окт 2012, 22:19
Так может рассуждать только начинающий школьник.

Бот Ahrefs.com приходит не один, а толпой от нескольких десятков до нескольких сотен одновременно.
И он приходит не регится, а сканировать бэки. Грузит сервер конкретно.
Много ботов которые конкретно гадят ресурсу, Ezooms среди них.

Добавлено спустя 2 минуты 18 секунд:
serrrios писал(а):капча рулет
Капча уже давно не рулит...
Romnik
Аватара пользователя
serrrios
Донатор
Сообщения: 1532
Зарегистрирован: 29 май 2009, 20:22
Сообщение 24 окт 2012, 11:30
О как, я начинающий школьник хВ запомнимс =В
Сервер грузит? А может его надо оптимизировать, чтоб такого не было?)
И как же они гадят?)))
http://aniproject.ru - перспектива... велком епта..
http://www.ppkbb3cker.ru/viewtopic.php?f=35&t=1042 - мои платные услуги по трекеру.
serrrios
Аватара пользователя
votept
Донатор
Сообщения: 806
Зарегистрирован: 18 июл 2010, 17:57
Сообщение 24 окт 2012, 12:33
:D О! Серега ты школьник? Я не знал. Ахах.
votept
Аватара пользователя
serrrios
Донатор
Сообщения: 1532
Зарегистрирован: 29 май 2009, 20:22
Сообщение 24 окт 2012, 12:40
Но, выходит так хВВВВВВВВВВВВ
http://aniproject.ru - перспектива... велком епта..
http://www.ppkbb3cker.ru/viewtopic.php?f=35&t=1042 - мои платные услуги по трекеру.
serrrios
Аватара пользователя
9CaraTT
VIP
Сообщения: 3095
Зарегистрирован: 13 мар 2011, 15:23
Сообщение 24 окт 2012, 15:58
  Грузит сервер конкретно.
.htaccess, iptables, ограничить число одновременных подключений с данного адреса и ещё способы есть разные
  прямые руки не из жопы тоже несут положительный фактор..
9CaraTT
18 сообщений
  • 1
  • 2
  • След.

Вернуться в «Минимоды и хаки для phpBB3»

Time: 0.000s | Queries: 0 | Peak Memory Usage: 0.00 МБ | GZIP: Unknown | SQL Explain
  • Список форумов
2018, made with by ThemeKita Создано на основе phpBB® Forum Software © phpBB Limited Русская поддержка phpBB (C) 2009-2025 @ PPK
  • Часовой пояс: UTC+04:00
Участники темы
Список форумов Участники темы
Перейти
Сайт ↳   Новости по сайту ↳   Новости обновлений ↳   Вопросы по сайту ↳   Non-russian speakers forum phpBB 3.1-3.3 ↳   Расширения для phpBB 3.1-3.3 ↳   Условно-бесплатные расширения ↳   Платные расширения ↳   Расширения для подписчиков ↳   Расширения в разработке ↳   База расширений ↳   Поиск и запросы расширений ↳   Запросы расширений, функционала и переводов для подписчиков ↳   Переводы расширений для phpBB3.1-3.3 ↳   Стили для phpBB 3.1-3.3 ↳   Вопросы по phpBB 3.1-3.3 ppkBB3cker ↳   Новости по трекеру и обновлениям ↳   Ошибки, проблемы, недочёты ↳   Предложения по новым функциям и возможностям ↳   Вопросы, ответы и примеры решений ↳   Моды и стили для трекера ↳   Готовые стили для трекера ↳   Запросы стилей для трекера ↳   Стили в разработке ↳   Готовые моды для трекера ↳   Запросы модов для трекера ↳   Моды в разработке ↳   Остальное ↳   F.A.Q. ↳   Ваши трекеры ↳   Оффтопик xbtBB3cker ↳   Новости по трекеру и обновлениям ↳   Вопросы, ответы, ошибки и обсуждение phpBB 3.0 ↳   Другие моды для phpBB3 ↳   Минимоды и хаки для phpBB3 ↳   Вопросы по phpBB3 ↳   phpBB3 ppkBB3cker Edition ↳   Платные услуги, моды, стили ↳   BB2Spoiler/BB3Spoiler ↳   BB3Topics ↳   BB3Sape ↳   BB3UserAgentInfo