Здравствуйте, гость ( Вход | Регистрация )

Рейтинг 0
ВПВСЧПС
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31


Записи на 17.12.2010

entry 17.12.2010, 14:20
Всем доброго времени суток!
Достали меня боты, регистрирующиеся на форуме. Автоматическая регистрация у нас запрещена, но это не прибавляет счастья, так как
приходится искать регистрации только с наших IP , подтверждать их, а "левые" соответственно удалять. Дошли руки и пропатчил я исходник
класса отвечающего за регистрацию в IPB.

Итак...

Ищем в дереве исходников файл
sources/action_public/register.php

В нем, после информации о копирайте идет описание класса register.
В самом начале класса, вставляем код функции, которая проверяет, из нашей ли сети пришел желающий зарегистрироваться или нет.

Код
    function checkIP($ip)
    {
        /* массив masks содержит маски наших сетей */
            $masks = array ("255.255.252.0","255.255.0.0", "255.255.0.0", "255.255.248.0");
        /* массив nets содержит объявления наших сетей */
            $nets = array ("91.204.176.0", "172.31.0.0", "10.10.0.0", "178.213.32.0");

            $my_i = 0;

     foreach ($masks as $mask)
      {
        if( (long2ip(ip2long($ip) & ip2long($mask))) == $nets[$my_i]) return true;
            $my_i++;
        }
         return false;
     }

Алгоритм не самый красивый, с точки зрения эстетики, но работает железно и прост smile.gif
Затем, находим начало функции auto_run того же класса и в самом начале добавляем:

Код
if(! $this->checkIP($_SERVER["REMOTE_ADDR"])) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'reg_off' )); }


Все. Теперь, пытающийся зарегистрироваться или сменить пароль на аккаунт, получит только сообщение , что регистрация отключена.
Разумеется, только если он не из нашей сети. smile.gif
Update:
Методом от обратного, можно наоборот, запретить регистрацию для определенных адресов/сетей.

Код
if( $this->checkIP($_SERVER["REMOTE_ADDR"])) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'reg_off' )); }