Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Guest RSS-Bot

Важное с Sysman.Ru: Добавление флуд-контроля для гостей

Recommended Posts

Guest RSS-Bot

Song:

Вы не поверите, но в форуме IPB 1.х не существует ограничение для гостей на флуд.

Грубо говоря зарегистрированный юзер посылая два сообщения подряд получит сообщение об ошибке с требованием подождать сколько-то времени, а гость - нет.

И, если доступ гостей на ваш форум открыт, у них есть замечательная возможность зас@@ть (извиняюсь за выражение) ваш форум, посылая спам каждую секунду.

Это надо обязательно поправить.

 

Ниже я расскажу как это сделать.

Share this post


Link to post
Share on other sites
Guest RSS-Bot

Song: Изменения нужно внести в файлы:

  • post_new_post.php
  • post_poll.php
  • post_reply_post.php
  • post_q_reply_post.php

Во всех них есть одинаковый кусок кода:

        [color=green]//-------------------------------------------------[/color]        [color=green]// If we are a member, lets update thier last post[/color]        [color=green]// date and increment their post count.[/color]        [color=green]//-------------------------------------------------[/color]                [color=#048284]$pcount[/color] = "";                [b]if[/b] ([color=#048284]$ibforums[/color]->member['id'])        {            [b]if[/b] ([color=#048284]$class[/color]->forum['inc_postcount'])            {                [color=green]// Increment the users post count[/color]                                [color=#048284]$pcount[/color] = "posts=posts+1, ";                            }                        [color=green]// Are we checking for auto promotion?[/color]                        [b]if[/b] ([color=#048284]$ibforums[/color]->member['g_promotion'] != '-1&-1')            {                list([color=#048284]$gid[/color], [color=#048284]$gposts[/color]) = explode( '&', [color=#048284]$ibforums[/color]->member['g_promotion'] );                                [b]if[/b] ( [color=#048284]$gid[/color] > [color=navy]0[/color] [b]and[/b] [color=#048284]$gposts[/color] > [color=navy]0[/color] )                {                    [b]if[/b] ( [color=#048284]$ibforums[/color]->member['posts'] + [color=navy]1[/color] >= [color=#048284]$gposts[/color] )                    {                        [color=#048284]$mgroup[/color] = "mgroup='$gid', ";                                                [b]if[/b] ( USE_MODULES == [color=navy]1[/color] )                        {                            [color=#048284]$class[/color]->modules->register_class(&[color=#048284]$class[/color]);                            [color=#048284]$class[/color]->modules->on_group_change([color=#048284]$ibforums[/color]->member['id'], [color=#048284]$gid[/color]);                        }                    }                }            }                        [color=#048284]$ibforums[/color]->member['last_post'] = time();                        [color=#048284]$DB[/color]->query("UPDATE ibf_members SET ".[color=#048284]$pcount[/color].[color=#048284]$mgroup[/color].                                              "last_post='"    .[color=#048284]$ibforums[/color]->member['last_post']   ."'".                                              "WHERE id='"     .[color=#048284]$ibforums[/color]->member['id']."'");        }

По этому куску кода также есть ещё одно замечание, см. Добавление в счётчик юзера

Можете сразу пофиксить.

 

Но вернёмся к исправлению.

Во-первых нужно добавить поле в таблицу ibf_sessions:

[color=blue][b]ALTER TABLE[/b][/color] ibf_sessions [color=green][b]ADD[/b][/color] last_post [color=green]INT[/color]([color=magenta]1[/color][color=magenta]0[/color]) unsigned [color=brown]default[/color] [color=brown]NULL[/color]

Во-вторых, в заголовке текущей функции есть объявление глобальных объектов, например:

        [b]global[/b] [color=#048284]$ibforums[/color], [color=#048284]$std[/color], [color=#048284]$DB[/color], [color=#048284]$print[/color];

В них нужно добавить объект $sess:

        [b]global[/b] [color=#048284]$ibforums[/color], [color=#048284]$std[/color], [color=#048284]$DB[/color], [color=#048284]$print[/color], [color=#048284]$sess[/color];

В-третьих, в вышеупомянутый кусок кода нужно добавить выделенные ниже цветом части:

        [color=green]//-------------------------------------------------        // If we are a member, lets update thier last post        // date and increment their post count.        //-------------------------------------------------[/color]                [color=#048284]$pcount[/color] = "";                [b]if[/b] ([color=#048284]$ibforums[/color]->member['id'])        {            [b]if[/b] ([color=#048284]$class[/color]->forum['inc_postcount'])            {                [color=green]// Increment the users post count[/color]                                [color=#048284]$pcount[/color] = "posts=posts+1, ";                            }                        [color=green]// Are we checking for auto promotion?[/color]                        [b]if[/b] ([color=#048284]$ibforums[/color]->member['g_promotion'] != '-1&-1')            {                list([color=#048284]$gid[/color], [color=#048284]$gposts[/color]) = explode( '&', [color=#048284]$ibforums[/color]->member['g_promotion'] );                                [b]if[/b] ( [color=#048284]$gid[/color] > [color=navy]0[/color] [b]and[/b] [color=#048284]$gposts[/color] > [color=navy]0[/color] )                {                    [b]if[/b] ( [color=#048284]$ibforums[/color]->member['posts'] + [color=navy]1[/color] >= [color=#048284]$gposts[/color] )                    {                        [color=#048284]$mgroup[/color] = "mgroup='$gid', ";                                                [b]if[/b] ( USE_MODULES == [color=navy]1[/color] )                        {                            [color=#048284]$class[/color]->modules->register_class(&[color=#048284]$class[/color]);                            [color=#048284]$class[/color]->modules->on_group_change([color=#048284]$ibforums[/color]->member['id'], [color=#048284]$gid[/color]);                        }                    }                }            }                        [color=#048284]$ibforums[/color]->member['last_post'] = time();                        [color=#048284]$DB[/color]->query("UPDATE ibf_members SET ".[color=#048284]$pcount[/color].[color=#048284]$mgroup[/color].                                              "last_post='"    .[color=#048284]$ibforums[/color]->member['last_post']   ."'".                                              "WHERE id='"     .[color=#048284]$ibforums[/color]->member['id']."'");        } [b]else[/b]        {            [color=#048284]$DB[/color]->query("UPDATE ibf_sessions SET last_post='".time()."' WHERE id='".addslashes([color=#048284]$sess[/color]->session_id)."'");        }

Share this post


Link to post
Share on other sites
Guest RSS-Bot

Song: Теперь ограничим флуд-контроль для юзеров и гостей, сообщение которых добавилось в режиме премодерации.

Для этого в вышеупомянутых 4-х файлах нужно найти:

        [b]if[/b] ( [color=#048284]$class[/color]->obj['moderate'] == [color=navy]1[/color] [b]OR[/b] [color=#048284]$class[/color]->obj['moderate'] == [color=navy]2[/color] )        {            ...                    [color=#048284]$DB[/color]->query("UPDATE ibf_forums SET has_mod_posts=1 WHERE id=".[color=#048284]$class[/color]->forum['id']);

Пожалуйста при поиске фрагмента имейте ввиду, что выделенное цветом число может меняться.

 

Во всех найденных фрагментах добавьте выделенную часть:

        [b]if[/b] ( [color=#048284]$class[/color]->obj['moderate'] == [color=navy]1[/color] [b]OR[/b] [color=#048284]$class[/color]->obj['moderate'] == [color=navy]2[/color] )        {            [b]if[/b] ( [color=#048284]$ibforums[/color]->member['id'] )            {                [color=#048284]$DB[/color]->query("UPDATE ibf_members SET last_post='".time()."' WHERE id='".[color=#048284]$ibforums[/color]->member['id']."'");            } [b]else[/b]            {                [color=#048284]$DB[/color]->query("UPDATE ibf_sessions SET last_post='".time()."' WHERE id='".addslashes([color=#048284]$sess[/color]->session_id)."'");            }            ...                    [color=#048284]$DB[/color]->query("UPDATE ibf_forums SET has_mod_posts=1 WHERE id=".[color=#048284]$class[/color]->forum['id']);

Share this post


Link to post
Share on other sites
Guest RSS-Bot

Song: Теперь ограничим флуд-контроль для юзеров и гостей, сообщение которых добавилось в режиме премодерации.

Для этого в вышеупомянутых 4-х файлах нужно найти:

        [b]if[/b] ( [color=#048284]$class[/color]->obj['moderate'] == [color=navy]1[/color] [b]OR[/b] [color=#048284]$class[/color]->obj['moderate'] == [color=navy]2[/color] )        {            ...                    [color=#048284]$DB[/color]->query("UPDATE ibf_forums SET has_mod_posts=1 WHERE id=".[color=#048284]$class[/color]->forum['id']);

Пожалуйста при поиске фрагмента имейте ввиду, что выделенное цветом число может меняться.

 

Во всех найденных фрагментах добавьте выделенную часть:

        [b]if[/b] ( [color=#048284]$class[/color]->obj['moderate'] == [color=navy]1[/color] [b]OR[/b] [color=#048284]$class[/color]->obj['moderate'] == [color=navy]2[/color] )        {            [b]if[/b] ( [color=#048284]$ibforums[/color]->member['id'] )            {                [color=#048284]$DB[/color]->query("UPDATE ibf_members SET last_post='".time()."' WHERE id='".[color=#048284]$ibforums[/color]->member['id']."'");            } [b]else[/b]            {                [color=#048284]$DB[/color]->query("UPDATE ibf_sessions SET last_post='".time()."' WHERE id='".addslashes([color=#048284]$sess[/color]->session_id)."'");            }            ...                    [color=#048284]$DB[/color]->query("UPDATE ibf_forums SET has_mod_posts=1 WHERE id=".[color=#048284]$class[/color]->forum['id']);

Share this post


Link to post
Share on other sites
Guest RSS-Bot

Song: (продолжение следует)

Share this post


Link to post
Share on other sites
Guest RSS-Bot

Song: Собственно само ограничение:

 

Найдите:

Цитата (Post.php)
            [color=green]// Flood check..[/color]                        [b]if[/b] ( [color=#048284]$ibforums[/color]->input['CODE'] != "08" [b]and[/b] [color=#048284]$ibforums[/color]->input['CODE'] != "09" [b]and[/b] [color=#048284]$ibforums[/color]->input['CODE'] != "14" [b]and[/b] [color=#048284]$ibforums[/color]->input['CODE'] != "15" )            {                [b]if[/b] ( [color=#048284]$ibforums[/color]->vars['flood_control'] > [color=navy]0[/color] )                {                    [b]if[/b] ([color=#048284]$ibforums[/color]->member['g_avoid_flood'] != [color=navy]1[/color])                    {                        [b]if[/b] ( time() - [color=#048284]$ibforums[/color]->member['last_post'] < [color=#048284]$ibforums[/color]->vars['flood_control'] )                        {                            [color=#048284]$std[/color]->Error( [b]array[/b]( 'LEVEL' => [color=navy]1[/color], 'MSG' => 'flood_control' , 'EXTRA' => [color=#048284]$ibforums[/color]->vars['flood_control'] ) );                        }                    }                }                            }

 

Замените на:

            [color=green]// Flood check..[/color]                        [b]if[/b] ( [color=#048284]$ibforums[/color]->input['CODE'] != "08" [b]and[/b] [color=#048284]$ibforums[/color]->input['CODE'] != "09" [b]and[/b] [color=#048284]$ibforums[/color]->input['CODE'] != "14" [b]and[/b] [color=#048284]$ibforums[/color]->input['CODE'] != "15" )            {                [b]if[/b] ( [color=#048284]$ibforums[/color]->member['id'] )                 {                            [color=green]// Member flood check..[/color]                    [b]if[/b] ( [color=#048284]$ibforums[/color]->member['g_avoid_flood'] != [color=navy]1[/color] )                    {                        [b]if[/b] ( time() - [color=#048284]$ibforums[/color]->member['last_post'] < [color=#048284]$ibforums[/color]->vars['flood_control'] )                        {                            [color=#048284]$std[/color]->Error(     [b]array[/b](                                             'LEVEL' => [color=navy]1[/color],                                         'MSG'     => 'flood_control' ,                                         'EXTRA' => [color=#048284]$ibforums[/color]->member['g_search_flood']                                 )     );                        }                    }                } [b]elseif[/b] ( [color=#048284]$ibforums[/color]->vars['flood_control'] )                {                         [color=green]// Additional flood check[/color]                    [color=#048284]$DB[/color]->query("SELECT last_post FROM ibf_sessions WHERE id='".addslashes([color=#048284]$sess[/color]->session_id)."' LIMIT 1");                            [color=#048284]$last_post[/color] = [color=#048284]$DB[/color]->fetch_row();                        [b]if[/b] ( [color=#048284]$last_post[/color]['last_post'] )                    {                        [b]if[/b] ( ( time() - [color=#048284]$last_post[/color]['last_post'] ) < [color=#048284]$ibforums[/color]->vars['flood_control'] )                        {                            [color=#048284]$std[/color]->Error( [b]array[/b](                                             'LEVEL' => [color=navy]1[/color],                                         'MSG'     => 'flood_control',                                         'EXTRA' => [color=#048284]$ibforums[/color]->vars['flood_control']                                 )     );                        }                    }                }            }

Share this post


Link to post
Share on other sites
Guest RSS-Bot

Song: Вы можете заменить строчки:

[b]if[/b] ( time() - [color=#048284]$ibforums[/color]->member['last_post'] < [color=#048284]$ibforums[/color]->vars['flood_control'] )

[b]if[/b] ( time() - [color=#048284]$last_post[/color]['last_post'] < [color=#048284]$ibforums[/color]->vars['flood_control'] )

на:

[b]if[/b] ( time() - [color=#048284]$ibforums[/color]->member['last_post'] < [color=#048284]$ibforums[/color]->member['g_search_flood'] )

и

 [b]if[/b] ( time() - [color=#048284]$last_post[/color]['last_post'] < [color=#048284]$ibforums[/color]->member['g_search_flood'] )

соответственно.

 

Тем самым вы сделаете флуд контроль не единый для всех, который определяется переменной

[color=#048284]$INFO[/color]['flood_control']

файла conf_global.php,

а настройкой флуд-контроля при поиске для каждой группы.

Т.е. сделав флуд-контроль различным для каждой из групп, определяемой настройкой группы в Админ-центре.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...