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

Фильтр badwords

Recommended Posts

Проблема в следующем, IPB 2.0.3. фильтр запрещённых слов работает не совсем корректно именно в приватных сообщениях, то есть спамер зашедший на форум может попытаться отправить спам остальным участникам через приват, даже если его слово занесено в список badwords в заголовке сообщения приватного письма оно не фильтруется. Собственно сабж, что надо поправить что бы и в приватных сообщениях заголовок письма подпадал под фильтр. Насколько я понял код отвечающий за это находится тут post_parser.php

 

    //-----------------------------------------
   // Badwords:
   // Swops naughty, naugty words and stuff
   //-----------------------------------------

   function bad_words($text = "")
   {
       global $DB, $ibforums;

       if ($text == "")
       {
           return "";
       }

       if ( $this->bypass_badwords == 1 )
       {
           return $text;
       }

       //-----------------------------------------

       if ( is_array( $ibforums->cache['badwords'] ) )
       {
           usort( $ibforums->cache['badwords'] , array( 'post_parser', 'word_length_sort' ) );

           if ( count($ibforums->cache['badwords']) > 0 )
           {
               foreach($ibforums->cache['badwords'] as $idx => $r)
               {

                   if ($r['swop'] == "")
                   {
                       $replace = '######';
                   }
                   else
                   {
                       $replace = $r['swop'];
                   }

                   //-----------------------------------------

                   $r['type'] = preg_quote($r['type'], "/");

                   //-----------------------------------------

                   if ($r['m_exact'] == 1)
                   {
                       $text = preg_replace( "/(^|\B)".$r['type']."(\b|!|\?|\.|,|$)/i", "$replace", $text );
                   }
                   else
                   {
                       $text = preg_replace( "/".$r['type']."/i", "$replace", $text );
                   }
               }
           }
       }

       return $text;

   }

 

 

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

Share this post


Link to post
Share on other sites

./sources/action_public/messenger.php

найти что-то типа

$info['msg_title']   = $r['mt_title'];

 

вставить выше

$r['mt_title']   = $this->msglib->postlib->parser->bad_words( $r['mt_title'] );

 

Это под 2.3 пишу, в 2.0 вызов метода может отличаться

Share this post


Link to post
Share on other sites

Не помогает, попробовал, всё равно заголовок письма не фильтруется. вот код похоже отвечающий за это.

 

         if ( $DB->get_num_rows() )
        {
            while ( $r = $DB->fetch_row() )
            {
                $info = array();

                $msg_ids[] = $r['mt_id'];

                $info['msg_date']    = $std->get_date( $r['mt_date'], 'LONG' );
                $info['msg_title']   = $r['mt_title'];
                $info['msg_sender']  = $r['name'];
                $info['msg_content'] = $this->parser->convert( array( 'TEXT'    => $r['msg_post'],
                                                                     'SMILIES' => 0,
                                                                     'CODE'    => $ibforums->vars['msg_allow_code'],
                                                                     'HTML'    => $ibforums->vars['msg_allow_html']
                                                                   )
                                                            );

                if ($type == 'xls')
                {
                    $output .= '"'.$this->strip_quotes($info['msg_title']).'","'.$this->strip_quotes($info['msg_date']).'","'.$this->strip_quotes($info['msg_sender']).'","'.$this->strip_quotes($info['msg_content']).'"'."\r";
                }
                else
                {
                    if ( $r['vid'] == 'sent' )
                    {
                        $info['msg_sender']  = $r['rec_name'];
                        $output .= $this->html->archive_html_entry_sent($info);
                    }
                    else
                    {
                        $output .= $this->html->archive_html_entry($info);
                    }
                }
            }

            if ($type == 'html')
           {
               $output .= $this->html->archive_html_footer();
           }

           $num_msg = count( $msg_ids );

Edited by fatal1ty100

Share this post


Link to post
Share on other sites

У парсера тут другая переменная

 

выше вставить

$r['mt_title']   = $this->parser->bad_words( $r['mt_title'] );

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...