[DEV] AntiSpider

Здесь авторы могут постить бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!

[DEV] AntiSpider

Сообщение Егор Наклоняев 17.02.2005 5:20

Борьба с пауками.
1. Создаём фаил mln.php в каталоге форума (лучше названия менять, ибо враг не дремлет)
Код: Выделить всё
<?php
/***************************************************************************
*                                mln.php
*                            -------------------
*   copyright            : (C) 2005 Egor Naklonyaeff
*
*   $Id: mln.php,v 1.0.2 2005/02/17 17:14:00 chyduskam Exp $
*
***************************************************************************/

/***************************************************************************
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$sql = "SELECT ban_ip
         FROM " . BANLIST_TABLE . "
         WHERE ban_ip = '$user_ip'";
   if ( !($result = $db->sql_query($sql)) )
   {
      message_die(GENERAL_ERROR, "Shit happens");
   }
   if ($db->sql_fetchrow($result))
   {
      message_die(GENERAL_ERROR, "Shit happens");
   }

$sql = "INSERT INTO " . BANLIST_TABLE . " (ban_ip)
            VALUES ('" . $user_ip . "')";
if ( !$db->sql_query($sql) )
   {
   message_die(GENERAL_ERROR, "Couldn't insert ban_ip info into database", "", __LINE__, __FILE__, $sql);
   }
$sql = "DELETE FROM " . SESSIONS_TABLE . "
         WHERE session_ip ='$user_ip'";
   if ( !$db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, "Shit happens");
   }
include($phpbb_root_path . 'includes/emailer.'.$phpEx);
         $emailer = new emailer($board_config['smtp_delivery']);

         $emailer->from($board_config['board_email']);
         $emailer->replyto($board_config['board_email']);

         $emailer->use_template('spider', $board_config['default_lang']);
         $emailer->email_address($board_config['board_email']);
         $emailer->set_subject('Spiderman must die');

         $emailer->assign_vars(array(
            'SITENAME' => $board_config['sitename'],
            'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
            'AGENT'=>$_SERVER["HTTP_USER_AGENT"],
            'USERNAME' => $userdata['username'],
            'IP' => str_replace('255', '*', decode_ip($user_ip))));

         $emailer->send();
         $emailer->reset();
message_die (GENERAL_MESSAGE,"Sic transit gloria mundi");
?>

2. Запрещаем его индексировать в robots.txt, чтобы поисковики не убить
3. Создаем шаблон spider.tpl в папке language/lang_russian/email/
Код: Выделить всё
Subject: Попытка скачать сайт {SITENAME}
Charset: windows-1251

На {SITENAME} была зафиксирована попытка скачать сайт:

Username: {USERNAME}
IP: {IP}
User agent: {AGENT}

{EMAIL_SIG}


4. Ставим в шаблоне overall_header.tpl ссылку вида <a href="mln.php"></a>

Проверил. Вроде - работает.
Последний раз редактировалось Егор Наклоняев 17.02.2005 18:18, всего редактировалось 1 раз.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда


Сообщение Димка 17.02.2005 12:08

Можно поподробнее, что сие даёт? :roll:

Добавлено спустя 2 минуты 1 секунду:

2. Где должен лежать и как выглядит robots.txt (ламер я)
3.
Ставим в шаблоне overall_header.tpl ссылку вида <a href="mln.php"></a>

просто пустую ссылку и куда конкретно?
Версия моего форума - 2.0.15
Аватара пользователя
Димка
phpBB 1.4.1
 
Сообщения: 40
Зарегистрирован: 10.02.2005 14:35

Сообщение Егор Наклоняев 17.02.2005 18:19

Можно поподробнее, что сие даёт?

Человек или робот, пытающийся скачать то, что скачивать нельзя, автоматически сам себя забанит

2. Где должен лежать и как выглядит robots.txt (ламер я)

http://www.yandex.ru/info/webmaster2.html


просто пустую ссылку и куда конкретно?

Именно пустую. Можно, конечно, поставить ссылку сида "Нажми меня" и забанить всех посетителей, но лучше этого не делать.
А место - любое. На Ваш вкус.

P.S. Я вот репу почесал - не хватает писем Админу в коде для полного счастья. Мол приходил такой-то сякой-то с таким-то User Agent и такого-то IP за что и был упромыслен. Надо будет доделать.

Добавлено спустя 58 минут 48 секунд:

Кстати, глянул: ночью одного деятеля уже забанил, оказывается.

Добавлено спустя 3 часа 9 минут 19 секунд:

Нагло стащил у Xpert кусок кода и вставил в программу. Теперь ещё и письма пишет.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение Splurov 17.02.2005 19:07

Егор Наклоняев
Вот это по правде действенный мод! :-)
Но бан - это слишком жестоко... А если юзер захотел себе скачать часть форума, а тут бац - и бан...
Splurov
phpBB 2.0.2
 
Сообщения: 151
Зарегистрирован: 28.11.2004 11:12
Откуда: Россия, Томск

Сообщение Xpert 17.02.2005 22:29

Предлагаю отправлять забанненому пользователю, если это не гость, письмо о бане, хотя логика мне подсказывает, что чего-чего, а зарегистрированным пользователем качалка стать не может.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5710
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru

Сообщение Егор Наклоняев 17.02.2005 22:47

Самое смешное, что может. При тестовом скачивании Disko Pump определился пользователь.

Добавлено спустя 3 минуты 43 секунды:

Но бан - это слишком жестоко... А если юзер захотел себе скачать часть форума, а тут бац - и бан...

Ну, можнос делать менее брутально. например, проверку на анонимность. Анонимов банить, а зарегистрированным писать гневные письма и под копирку с админом.

Самое главное, этот мод должен зарэзать всех пауков, ворующих почтовые адреса для спаммеров.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение YarNET 18.02.2005 1:37

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

Для защиты достаточно это использовать:

Код: Выделить всё
##############################################################
## MOD Title: Anti spam-bots
## MOD Author: Weird Alexis < alexisbietti@gmail.com > (Alexis BIETTI) http://www.artefact.zik.mu/
## MOD Description: This mod hides e-mail addresses of members to spam-bots and anonymous users.
## MOD Version: 1.0.0
##
## Installation Level: Easy
## Installation Time: 1 Minute
## Files To Edit: /groupcp.php, /memberlist.php, /viewtopic.php, /includes/usercp_viewprofile.php
## Included Files: n/a
##############################################################
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbb.com/mods/
##############################################################
## Author Notes: This mod was tested on phpBB version 2.0.4 *only*.
##
##############################################################
## MOD History:
##
##   2004-10-24 - Version 1.0.0
##      - Initial version. Hides e-mail in topics, member list, profiles and groups.
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################

#
#-----[ OPEN ]------------------------------------------
#
/groupcp.php

#
#-----[ FIND ]------------------------------------------
#
   if ( !empty($row['user_viewemail']) || $group_mod )

#
#-----[ REPLACE WITH ]------------------------------------------
#
   if ( empty($userdata['user_id']) || ($userdata['user_id'] == ANONYMOUS) )
   {
      if ( !empty($row['user_viewemail']) )
      {
         $email_img = '<img src="' . $images['icon_email'] . '" alt="' . $lang['Hidden_email'] . '" title="' . $lang['Hidden_email'] . '" border="0" />';
      }
      else
      {
         $email_img = '&nbsp;';
      }
      $email = '&nbsp;';
   }
   else if ( !empty($row['user_viewemail']) || $group_mod )

#
#-----[ OPEN ]------------------------------------------
#
/memberlist.php

#
#-----[ FIND ]------------------------------------------
#
      if ( !empty($row['user_viewemail']) || $userdata['user_level'] == ADMIN )

#
#-----[ REPLACE WITH ]------------------------------------------
#
      if ( empty($userdata['user_id']) || ($userdata['user_id'] == ANONYMOUS) )
      {
         if ( !empty($row['user_viewemail']) )
         {
            $email_img = '<img src="' . $images['icon_email'] . '" alt="' . $lang['Hidden_email'] . '" title="' . $lang['Hidden_email'] . '" border="0" />';
         }
         else
         {
            $email_img = '&nbsp;';
         }
         $email = '&nbsp;';
      }
      else if ( !empty($row['user_viewemail']) || $userdata['user_level'] == ADMIN )

#
#-----[ OPEN ]------------------------------------------
#
/viewtopic.php

#
#-----[ FIND ]------------------------------------------
#
      if ( !empty($postrow[$i]['user_viewemail']) || $is_auth['auth_mod'] )

#
#-----[ REPLACE WITH ]------------------------------------------
#
      if ( empty($userdata['user_id']) || ($userdata['user_id'] == ANONYMOUS) )
      {
         if ( !empty($postrow[$i]['user_viewemail']) )
         {
            $email_img = '<img src="' . $images['icon_email'] . '" alt="' . $lang['Hidden_email'] . '" title="' . $lang['Hidden_email'] . '" border="0" />';
         }
         else
         {
            $email_img = '&nbsp;';
         }
         $email = '&nbsp;';
      }
      else if ( !empty($postrow[$i]['user_viewemail']) || $is_auth['auth_mod'] )

#
#-----[ OPEN ]------------------------------------------
#
/includes/usercp_viewprofile.php

#
#-----[ FIND ]------------------------------------------
#
if ( !empty($profiledata['user_viewemail']) || $userdata['user_level'] == ADMIN )

#
#-----[ REPLACE WITH ]------------------------------------------
#
if ( empty($userdata['user_id']) || ($userdata['user_id'] == ANONYMOUS) )
{
   if ( !empty($profiledata['user_viewemail']) )
   {
      $email_img = '<img src="' . $images['icon_email'] . '" alt="' . $lang['Hidden_email'] . '" title="' . $lang['Hidden_email'] . '" border="0" />';
   }
   else
   {
      $email_img = '&nbsp;';
   }
   $email = '&nbsp;';
}
else if ( !empty($profiledata['user_viewemail']) || $userdata['user_level'] == ADMIN )

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM


Эффект 100%
Проверь, за что ты платишь деньги провайдеру?
Тестирование скорости соединения с INNTERNET
Аватара пользователя
YarNET
phpBB 2.0.12
 
Сообщения: 579
Зарегистрирован: 23.11.2004 14:03

Сообщение Егор Наклоняев 18.02.2005 11:18

Ночной улов.

Username: Anonymous
IP: 208.223.208.181
User agent: Python-urllib/1.15

Добавлено спустя 6 минут 42 секунды:

Для защиты достаточно это использовать:


Кто бы спорил. Вполне достаточно, только нагрузку на сервер это не уменьшает. Пауки как шарахались, дергая БД, так и будут шарахаться.
А здесь - принудительная эфтаназия.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение YarNET 18.02.2005 16:08

4. Ставим в шаблоне overall_header.tpl ссылку вида <a href="mln.php"></a>


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

Добавлено спустя 18 минут 44 секунды:

Кстати, вот от такого скрипт защищает:

Код: Выделить всё
[Mon Feb 14 14:39:55 2005] [error] [client 217.15.134.68] File does not exist: /home/forum/www/******
\xd0\x9f\xd1\x80\xd0\xbe\xd1\x81\xd0\xbc\xd0\xbe\xd1\x82\xd1\x80 \xd1\x82\xd0\xb5\xd0\xbc\xd1\x8b -
\xd0\x94\xd0\xbe\xd1\x81\xd1\x82\xd1\x83\xd0\xbf \xd0\xba FTP ****** \xd0\xbe\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82
\xd0\x92\xd0\xa1\xd0\x95\xd0\x9c ).files, referer: http: //forum.******.ru/viewtopic.php?t=5896
Проверь, за что ты платишь деньги провайдеру?
Тестирование скорости соединения с INNTERNET
Аватара пользователя
YarNET
phpBB 2.0.12
 
Сообщения: 579
Зарегистрирован: 23.11.2004 14:03

Сообщение Xpert 18.02.2005 20:12

Егор Наклоняев
Как бы все это согласно шаблону модов оформить ;)

Добавлено спустя 50 минут 1 секунду:

Думаю еще, лучше использовать $HTTP_SERVER_VARS вместо $_SERVER;
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
 
Сообщения: 5710
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru

Сообщение Splurov 18.02.2005 21:07

Xpert
1. Некоторые качалки на сколько я помню, куки из эксплорера умеют брать. Следовательно можно и зарегенным походить.
2. $HTTP_SERVER_VARS вместо $_SERVER - абсурдно как-то звучит... register_globals=off и только второе будет работать. А как-то знаете-ли, разработчики (да и я с ними полностью согласен), советуют off. От чего такая любовь к первому массиву?
Splurov
phpBB 2.0.2
 
Сообщения: 151
Зарегистрирован: 28.11.2004 11:12
Откуда: Россия, Томск

Сообщение Егор Наклоняев 18.02.2005 23:16

2. $HTTP_SERVER_VARS вместо $_SERVER - абсурдно как-то звучит... register_globals=off и только второе будет работать. А как-то знаете-ли, разработчики (да и я с ними полностью согласен), советуют off. От чего такая любовь к первому массиву?


Xpert прав.
Объясняю. Политика phpBB совместимости с пресловутой 3 версией.
В случае register_globals=off $HTTP_SERVER_VARS определяется в коде phpBB.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

Сообщение DedPichto 28.02.2005 19:30

Disallow: /phpBB2/mln.php - в таком варианте файл mln.php запрещен к индексированию, но сам каталог phpBB2/ нет - я правильно понял?
DedPichto
phpBB 2.0.0
 
Сообщения: 111
Зарегистрирован: 12.02.2005 14:11

Сообщение DedPichto 01.03.2005 2:54

Блин, у меня гугл забанило почему-то :)

Username: Anonymous
IP: 66.249.65.204
User agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)


Хотя до этого я наблюдал в админке пару часов, как он индексирует страницы.

robots.txt:
Disallow: /cgi-bin
Disallow: /phpBB2/mln.php

сама ссылка <a href="mln.php"></a> находится между тегами <noindex></noindex>

И чего оно? :)

P.S. Во, не успел ип убрать из черного списка - индексирует дальше. Продолжаю наблюдения.
DedPichto
phpBB 2.0.0
 
Сообщения: 111
Зарегистрирован: 12.02.2005 14:11

Сообщение Егор Наклоняев 01.03.2005 9:38

DedPichto

У Вас должно быть robots.txt:

Код: Выделить всё
User-agent: *
Disallow: /cgi-bin
Disallow: /phpBB2/mln.php


Он ТАК выглядит?

Добавлено спустя 44 секунды:

У меня лично гугля не разу не лазила куда не следует.
Аватара пользователя
Егор Наклоняев
Moderator
 
Сообщения: 417
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда

След.

Вернуться в Бета-версии модов для phpBB 2.0.x

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0