Как забанить/запретить поискового бота или определённый браузер на форуме phpBB3
Код: Выделить всё
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');
Код: Выделить всё
<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} [<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;"> <a href="{bots.U_EDIT}">{L_EDIT}</a> </td>
<td style="text-align: center;"> <a href="{bots.U_DELETE}">{L_DELETE}</a> </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>
Код: Выделить всё
'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),
Код: Выделить всё
$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,
Код: Выделить всё
$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;
Код: Выделить всё
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.');
}
}
Код: Выделить всё
));
?>
Код: Выделить всё
'BOT_BANNED' => 'Бан ботов',
'BOT_BANNED_EXPLAIN' => 'Включить бан поисковых ботов на форуме, 0 - отключить, 1 - включить частично (если пользователь определён как бот, для доступа необходимо будет войти на форум под своей учётной записью), 2 - включить полностью (все страницы форума будут недоступны)',
'BOT_BANNED_TEXT' => 'Сообщение для забаненных ботов',
'BOT_BANNED_TEXT_EXPLAIN' => ' Если число в предыдущей опции равно 2 - отображать указанный текст сообщения для бота (по молчанию будет отображаться сообщение: <em>Sorry, this browser banned on forum.</em>)',
Код: Выделить всё
));
?>
Код: Выделить всё
'BOT_BANNED' => 'Запретить',
'SELECT_ALL' => 'Да',
'UNSELECT_ALL' => 'Нет',
PPK
Romnik
PPK
Romnik
serrrios
Капча уже давно не рулит...serrrios писал(а):капча рулет
Romnik
serrrios
votept
serrrios
.htaccess, iptables, ограничить число одновременных подключений с данного адреса и ещё способы есть разныеГрузит сервер конкретно.
прямые руки не из жопы тоже несут положительный фактор..
9CaraTT