Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

Song:

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

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

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

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

 

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

Рекомендованные сообщения

Опубликовано:

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)."'");        }
Опубликовано:

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']);
Опубликовано:

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']);
Опубликовано:

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

Опубликовано:

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']                                 )     );                        }                    }                }            }
  • 5 недель спустя...
Опубликовано:

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,

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

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

Гость
Эта тема закрыта для дальнейших сообщений.

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.