vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3.6 Add-ons (https://vborg.vbsupport.ru/forumdisplay.php?f=194)
-   -   Add-On Releases - SpamBuster: Identify, log and remove spam posts on your forum (https://vborg.vbsupport.ru/showthread.php?t=155242)

cdoyle 07-27-2008 03:36 AM

I had this on my 3.5 forum, and we are about to upgrade to 3.7.
from what I'm reading this won't work with 3.7?

That really stinks, this is such a great hack, it worked wonderful on our forum.
I'm going to really miss it.

PossumX 07-31-2008 02:22 AM

I am running 3.7.1 PL2 and it is still working fine. Upgraded from 3.6.x all the way through, and it's still working.

3.7.2 PL1 upgrade is next, so we'll see what happens.

Mecho 08-03-2008 11:48 AM

Quote:

Originally Posted by PossumX (Post 1587957)
I am running 3.7.1 PL2 and it is still working fine. Upgraded from 3.6.x all the way through, and it's still working.

3.7.2 PL1 upgrade is next, so we'll see what happens.

go for it , it works fine in 3.7.2 patch1 .

septimus 08-18-2008 03:49 PM

EXCELLENT Mod, using it on two forums and am very happy with it.

One issue: It seem to sporadically fail to post up the report post. I can make it put up the report post with a test spam thread or post, but occasionally it just up and doesn't. I'm not sure exactly why, but I suspect that when there's a post that contains a massive number of keywords it might be choking on it?

For now we're just keeping an eye on the moderation queue, but it really would be more convenient to be able to have the report thread posting work reliably.

Any ideas how I can go about troubleshooting this?

gr8dude 10-21-2009 07:16 AM

Hi everyone, I've been using SpamBuster for a while and it made my life significantly easier. I thought of an improvement, I implemented it on my forum but the results are not as expected.

My idea was simple - add a regular expression that detects any string that has at least 3 URLs in it.

The regexp I'm using is
Code:

regexp:a_not_too_many_links:15:any:"/(http:\/\/.*){3,}/i"
If I test it with online regex tools, any "bad" string that should be busted is busted; however, when the same regexp is used by SpamBuster - messages are still getting past the filter.

I don't understand what is causing this. My guess is that it has something to do with the priority of the rules used by SpamBuster?

Unfortunately I am not a skilled PHP programmer, but I think I would be able to figure it out if I could step through the code with a debugger (as one can do with other languages) and see the state of each variable as new instructions are executed.

Any thoughts?

UK Jimbo 10-21-2009 07:24 AM

Hi - it's a long time since I've worked on this plugin. For general spam filtering in recent version of vBulletin I'd suggest using the built in Akismet powered spam filtering.

The only way I can think of checking for three + URLs with a regexp is to use something similar to:

(untested)
Code:

/.*http:\/\/.*http:\/\/.*http:\/\/.*/
James


edit:

Perhaps try:

Code:

/(.*?http:\/\/.*?){3,}/i
for your regexp too

gr8dude 10-21-2009 08:28 AM

Thanks for the swift response.

This is what I use as a testbed:
Every regexp you mentioned, as well as the one I devised myself works fine; i.e. the regexp tester reports that the given string matches the regexp.

Now, neither of them is effective when used with SpamBuster. I made this regexp the first one in SpamBuster's list - so I am certain this is not related to the order in which the rules are written in the config.

Maybe it can be understood by adding some debug statements to the plugin's code and watching the flow of its execution?


Thanks for suggesting Akismet, but my optimism faded away in just a few seconds - I saw that it is marked as "installed", therefore it means that some time ago I tested it and was not satisfied with the results and that my conclusion was that "SpamBuster is better" (-:

Simon Lloyd 01-11-2010 08:42 AM

I'd like to use this update version on vb 3.5.4 would it work?

gr8dude 01-12-2010 01:33 PM

UK Jimbo, I understood the cause of the problem.

The used regexp contains the ':' character (inside "http://").
When spambuster parses the rules, it uses ':' as a separator to explode the string into bits, ex:
Code:

regexp:a_nike_dunk:5:any:"/nike dunk/i"
Basically, the culprit is in this line of the sb_parse_config function:
Code:

// split up the line
$bits = preg_split('/(?<!\\\\):/',$rule);

This explains why the regexp is not found in the string - the regexp is simply not the one we thought we were using.

Suggested fix:
Use '::' as a separator in each rule, rather than ':'.

Replace
Code:

// split up the line
$bits = preg_split('/(?<!\\\\):/',$rule);

With
Code:

// split up the line
$bits = preg_split('/(?<!\\\\)::/',$rule);

Note: regular expressions are quite difficult to wrap one's brain around (-: Especially if I haven't written it myself, or if the regexp was written a long time ago. I didn't try to parse this regexp myself, I just guessed what it does and added another ':' and prayed for the best (-:

I don't know what the rationale behind that choice was, but isn't it easier to use this instead? It is straightforward and requires no belief in external forces :-)
Code:

$bits = explode('::', $rule);
My local tests are successful, below I have included the source of the file I am using for local tests. It is a stripped down version of Spambuster, the rules and the tested post are taken straight from this files, so you can make quick tests without involving VBulletin itself.


Can you share your thoughts on this, and perhaps update Spambuster to include this fix?



Code:

<?php


function sb_parse_config() {

       
        $rules_raw = <<<TEST
#Anything below this is added by Alex Railean
#regexp:a_jewels:5:any:"/^jewel/i"
#regexp:a_runescape:5:any:"/runescape/i"
#power leveling with spaces between words
#regexp:a_wow_powerleveling:10:any:"/power\s*leveling/i"
#regexp:a_wow_gold:5:any:"/gold/i"
#regexp:a_nike_dunk:5:any:"/nike dunk/i"
#regexp:a_hot:5:any:"/hot/i"
#regexp:a_manga:5:any:"/manga/i"
#regexp:a_jordan_shoes:5:any:"/jordan/i"
regexp::a_url::5::any::"/.*http:\/\//i"
regexp::a_gay::6::any::"/gay/i"
regexp::a_not_too_many_links::15::any::"/(http:\/\/.*){3,}/i"       
TEST;
       
       
        $rules = preg_split('/\r?\n/', $rules_raw);
        //echo var_export($rules, TRUE);
       
        $log = fopen("spam.log", "a");
    fwrite($log, strftime ("%c", time()) . "\n");
        $tmp =  var_export($rules, TRUE);
        fwrite($log, $tmp);
       
        $data = array();

        foreach($rules as $rule) {

                // comment lines
                if( strpos($rule,'#') === 0 )
                        continue;

                // split up the line
                $bits = preg_split('/(?<!\\\\)::/',$rule);
                $bits2 = explode('::', $rule);
                fwrite($log, var_export($bits, TRUE));
                fwrite($log, "----\n");
                fwrite($log, var_export($bits2, TRUE));
                fwrite($log, $rule);

                // need the right number of arguements
                if( count($bits) < 5 )
                        continue;

                for($i=0;$i<count($bits);$i++) {
                        if( preg_match('/^"(.*)"$/', $bits[$i], $m) )
                                $bits[$i] = $m[1];
                }


                $test=array();
                $test['type'] = array_shift($bits);
                $test['name'] = array_shift($bits);
                $test['score'] = array_shift($bits);
                $test['field'] = array_shift($bits);
                $test['data'] = $bits;

                $data[ $test['name'] ] = $test;
        }
       
        $tmp = var_export( $data, TRUE );
        echo $tmp."<br><br><br>";

        return $data;
}

//echo sb_parse_config();


// used to perform the test on the post
// function sb_test(&$obj,$table=null) {
function sb_test() {

        $hits=array();

        // no need to worry about most posts
        // if( $GLOBALS['vbulletin']->userinfo['posts'] > $GLOBALS['vbulletin']->options['spambusterpostcount'] )
                // return false;

        // parts of the post
        $req = array();
        // $req['title'] = $obj->fetch_field('title',$table);
        // $req['body'] = $obj->fetch_field('pagetext',$table);
        // $req['any'] = $req['title'] ."\n". $req['body'];
        $req['title'] = "title";
        $req['body'] = "nike tn (http://www.nikemaxtn.com/)    chaussure nike  (http://www.nikemaxtn.com/)  nike (http://www.nikemaxtn.com/)";
        $req['any'] = $req['title'] ."\n". $req['body'];

        // fetch the list of tests
        $tests = sb_parse_config();
        // run each test
        foreach($tests as $test) {
                //echo "#TEST  ".var_export($test). "<br>";
                echo "TEXT ".$req[ $test['field'] ]."<br>";

                $test_pass=false;

                // regular expression test
                if( $test['type'] == 'regexp' ) {
                        echo "RGXP ". $test['data'][0]."<br>";
                        $test_pass = @preg_match($test['data'][0],$req[ $test['field'] ]);
                        echo "RSLT [".$test_pass."]<br><br>";
                        //echo $req[ $test['field'] ] ."  ". $test_pass. "<br>";
                }

                // record the test if it was a hit
                if( $test_pass ) {
                        $hits[ $test['name'] ] = $test['score'];
                        $hits['total'] += $test['score'];
                }
        }

        return $hits;
}

sb_test();

?>

It looks messy, I apologize for that; PHP is simply not my cup of tea...

gr8dude 01-18-2010 08:06 AM

Seeing that there is no activity on this front, I attached my version of SpamBuster, with the change applied to it.

Note that the rules were changed, and that if you install it above the existing version you will have to manually update the rules via the administration panel.

I've been testing it since the time of the last message in this thread and it works as expected, no side effects were revealed.


All times are GMT. The time now is 07:31 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01410 seconds
  • Memory Usage 1,776KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (9)bbcode_code_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (3)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete