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)

Alibass 02-12-2008 05:54 AM

Nice hack **installed**

I have a robot that post rss feeds on my site. It has a user id and over 10,000 posts and yet spambuster keeps flagging it when it post a new file that may trip the rules criteria. :confused:

A nice feature would be if you could exclude user id's or user groups of your choosing.

Koushukei 03-20-2008 03:40 PM

Well done. Worked great. I have alot of spam so its definitely something I needed.

azjoe 04-04-2008 11:12 PM

Thanks uk Jimbo... works great.

DeanoG 05-01-2008 09:55 AM

Does anyone know if this works with VB3.7.0 Gold ?

thanks in advance

gim 05-01-2008 10:41 PM

Great addon. Thankyou! :)

pike2k 05-02-2008 06:39 AM

I don't know why, but it FEELS like this addon stopped working with 3.6.10 (maybe even with 3.6.9)

Be great if someone can put my mind at ease

webghey 05-07-2008 02:35 PM

Quote:

Originally Posted by DeanoG (Post 1504341)
Does anyone know if this works with VB3.7.0 Gold ?

thanks in advance

did you happen to test it? the OP hasn't been on since December

Tony L 05-26-2008 11:14 AM

Quote:

Originally Posted by pike2k (Post 1505442)
I don't know why, but it FEELS like this addon stopped working with 3.6.10 (maybe even with 3.6.9)

Be great if someone can put my mind at ease

I've just tested it on 3.6.10 and it does indeed seem to be broken. Annoying as I'm getting spammed to death at the moment.

Tony.

Charlie98902 05-28-2008 02:14 PM

I would like this updated to work on vBullettin 3.7.x as well please. I haven't tested this version since it doesn't work on 3.6.10 I doubt it'll work in the 3.7.x series.

myadsl 06-18-2008 02:08 PM

Everything works, but when I draw in RSS feeds from my own username it 'moderates' it despite the fact that I have more posts than the threshold value...

Any ideas on how to solve this?

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.

gr8dude 03-11-2010 06:43 AM

I have an additional question about this plugin - after applying the change I described above, everything works fine, but the problem is that I get a lot of notifications from SpamBuster.

A lot of threads are created on the forum, and even though they are not public, it is still a lot of work to sift through the email reports and delete the bad threads.

It will be much better if I could set another parameter, a threshold which, if reached, will tell SpamBuster to immediately delete the post, without notifying me and without asking questions.

Can someone implement that, or at least tell me where I should start digging in order to figure out how to add this feature?


All times are GMT. The time now is 01:04 PM.

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.01528 seconds
  • Memory Usage 1,814KB
  • 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
  • (3)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (21)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