Go Back   vb.org Archive > vBulletin Modifications > Archive > vB.org Archives > vBulletin 3.5 > vBulletin 3.5 Add-ons
FAQ Community Calendar Today's Posts Search

 
 
Thread Tools
Contacts Spam Filter Details »»
Contacts Spam Filter
Version: 1.1.0.2, by y2ksw y2ksw is offline
Developer Last Online: Feb 2023 Show Printable Version Email this Page

Version: 3.5.4 Rating:
Released: 06-25-2006 Last Update: 01-02-2007 Installs: 22
Uses Plugins
 
No support by the author.

This little product/plugin disallows automatic sending of spam through the Contact Us page.

Notes to version 1.1.0.0

Due to an almost personal battle against some spammers - intended as: high spam update rate, specially in the weekends when both me and spammers have nothing to do - I added an option to check the allowed number of hyperlinks in the message body, which makes this spam filter a little more intelligent.

The default number of allowed links is set to 12, which appears to be the lower limit from the latest research.

For customizing the message and the number of allowed hyperlinks, an option interface was added, which appears right below the vBulletin Options list - Site Name / URL / Contact Details, as 'Contact Us' Spam Filter Settings.

Version History
1.1.0.2 Additional recognition strings (repetitive 'http://')
1.1.0.1 FIX: Hyperlinks count bug.
1.1.0.0 Additional recognition strings; check of allowed number of hyperlinks in the message body; options interface

1.0.1.10 Additional recognition string
1.0.1.9 Additional recognition string (not published)
1.0.1.8 Additional recognition string (not published)
1.0.1.7 Additional recognition string
1.0.1.6 Additional recognition string (not published)
1.0.1.5 Additional recognition string (not published)
1.0.1.4 Additional recognition string
1.0.1.3 Additional recognition string
1.0.1.2 Additional recognition string
1.0.1.1 Full vBulletin integration, updateable
1.0.0.0 Basic Spam Filter

Supporters / CoAuthors

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.

Comments
  #12  
Old 08-05-2006, 10:02 AM
Arjan Arjan is offline
 
Join Date: Jul 2005
Location: Netherlands
Posts: 62
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

How can I get this code to work with 3.0.x?
It looks good, but so far I did not see a good way to get it to work with the older version.
Reply With Quote
  #13  
Old 08-05-2006, 10:29 AM
y2ksw's Avatar
y2ksw y2ksw is offline
 
Join Date: Aug 2003
Location: Italy
Posts: 1,418
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Arjan
How can I get this code to work with 3.0.x?
It looks good, but so far I did not see a good way to get it to work with the older version.
In fact there isn't a good way to do this inside 3.0.x, since it would need code changes, I cannot even provide, sorry :knockedout:
Reply With Quote
  #14  
Old 08-05-2006, 11:00 AM
Arjan Arjan is offline
 
Join Date: Jul 2005
Location: Netherlands
Posts: 62
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well I got it working.
in the send message.php I added the code in two parts:

This part went into the E-mail permissions piece. Just before the initialisation of the error array.
Since (as I understood) this blocks mail sent from outside the page, I left the Die message in it. Don't make them wise

Look for:
Code:
// initialize errors array
$errors = array();
Above it add:
Code:
//ANTI SPAM PART 1
$AntiSpamMessage1 = 'Spam filter: Please send your message through the appropriate message form.'; 
$AntiSpamMessage2 = 'Spam filter: Your message has not been accepted since it has some SPAM like properties.'; 

// Make sure the form was sent from a browser 
if(!$_SERVER['HTTP_USER_AGENT']) 
{ 
    die($AntiSpamMessage1); 
} 

// Make sure the form was POSTed 
if(!$_SERVER['REQUEST_METHOD'] == 'POST') 
{  
    die($AntiSpamMessage1); 
}

//END ANTI SPAM PART 1
Then the rest goes a bit lower in the page.
In the section
// ############################### do contact webmaster ###############################

Look for:
Code:
	// if it's all good... send the email
	if (empty($errors))
Just above it add:
Code:
    //ANTI SPAM PART 2
    // Allow only the sendmessage script 
    $MyReferrer = strtolower($_SERVER['HTTP_REFERER']); 
    $MyURL = strtolower($vboptions['bburl'] . '/' . $vboptions['contactuslink']); 
    if($MyReferrer != $MyURL) 
    {  
		eval('$errors[] = "' . $AntiSpamMessage1 . '";');
    }  
	
    // Check for strings in the message body. 
    // This string is found in automated browsers (all yet) at the bottom. 
    // For completeness we parse all post variables for this string. 
    // Prepared for more recognition strings. 
    $MyStrings = array( 
        '9c53d2119880d95e96e1a71e3a6c8340',              // the start
        'dc64615b0a1e1bd3cb2689bf82248b5c',              // 2006-06-27
        'f4dd026ac39b9e2fa576404ae93f215c',              // 2006-06-30
        '849b90dee61199d2ed871b18e1575cb5',              // 2006-07-06
        '05980283d7fb0e8cc54b17a2b2a0ab96',              // 2006-07-10
        '70fcdb09b8b18b50874603a6c99fcbcb',              // 2006-07-15
        'bd0e28eaccfa349da99ddd3880835725',              // 2006-07-16
        '71b0d16f90c6ef289fb9e0b08b44fd7c',              // 2006-07-16
        'df487ef8b49cead02c1a5d00a04288ce',              // 2006-07-21
        '6d02afe3993f73507d90e3f877d8eed8',              // 2006-07-23
        '5064a72d6d1acabba6a21f655481a5b5',              // 2006-07-24
        '33766d282efd27c3468309e546e247c5',              // 2006-07-29
        'c9551bfed82d85381e7fd1deb6fef0af'               // 2006-07-30
        ); 

    // Loop through each POST item and check for the headers 
    foreach($_POST as $MyKey => $MyPostItem) 
    { 
        $MyTempItem = strtolower($MyPostItem); 
        foreach($MyStrings as $MyString) 
        { 
            if(strpos($MyTempItem, strtolower($MyString)) !== FALSE) 
            { 
		      eval('$errors[] = "' . $AntiSpamMessage2 . '";');
            } 
        } 
    } 

    // Cleanup 
    unset($MyDieMessage, $MyReferrer, $MyURL, $MyHeaders, $MyKey, $MyPostItem, $MyTempItem, $MyHeader, $MyStrings, $MyString); 
	
    //END ANTI SPAM PART 2
This second part, uses the standard errors option, so it is showed in a nice way to the user. Just in case valid users do not pass the test (though I doubt).
Reply With Quote
  #15  
Old 08-05-2006, 04:12 PM
y2ksw's Avatar
y2ksw y2ksw is offline
 
Join Date: Aug 2003
Location: Italy
Posts: 1,418
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Arjan
(...) I left the Die message in it. Don't make them wise
Right. In fact I would rather show a blank page, which means all and nothing in the same time
Reply With Quote
  #16  
Old 08-06-2006, 09:27 AM
Arjan Arjan is offline
 
Join Date: Jul 2005
Location: Netherlands
Posts: 62
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

True word.... I noticed

And the'' be kind show the user what is wrong' is also not a good idea.
Updating the errorstring and showing the form again invites the spammer (spambot) to retry. My server got huge pageloads in the last couple of hours (5 times more) with a normal, even a bit low, amount of visitors. Which resulted in an overloaded CPU.

I saw I forgot two pieces of code. And with the just Die version you will get this for the second part:
Code:
    //ANTI SPAM PART 2
    // Allow only the sendmessage script 
    $MyReferrer = strtolower($_SERVER['HTTP_REFERER']); 
    $MyURL = strtolower($vboptions['bburl'] . '/' . $vboptions['contactuslink']); 
    if($MyReferrer != $MyURL) 
    {  
		//eval('$errors[] = "' . $AntiSpamMessage1 . '";');
        die($AntiSpamMessage); 
    }  

    // Filter header injections
    $MyHeaders = array(
        "content-type:", 
        "mime-version:", 
        "content-transfer-encoding:", 
        "bcc:", 
        "cc:"
        );


    // Check for the number of hrefs in settings.
    // This makes it pretty secure against future spam versions.
    $MyPostItem = strtolower($_POST['message']);
    $MyTempItem = explode('href=', $MyPostItem);
    if(count($MyTempItem) >= 2)
    {
        die($AntiSpamMessage);
    }


    // Loop through each POST item and check for the headers
    foreach($_POST as $MyKey => $MyPostItem)
    {
        $MyTempItem = strtolower($MyPostItem);
        foreach($MyHeaders as $MyHeader)
        {
            if(strpos($MyTempItem, $MyHeader) !== FALSE)
            {
                die($AntiSpamMessage);
            }
        }
    }
	
    // Check for strings in the message body. 
    // This string is found in automated browsers (all yet) at the bottom. 
    // For completeness we parse all post variables for this string. 
    // Prepared for more recognition strings. 
    $MyStrings = array( 
        '9c53d2119880d95e96e1a71e3a6c8340',              // the start
        'dc64615b0a1e1bd3cb2689bf82248b5c',              // 2006-06-27
        'f4dd026ac39b9e2fa576404ae93f215c',              // 2006-06-30
        '849b90dee61199d2ed871b18e1575cb5',              // 2006-07-06
        '05980283d7fb0e8cc54b17a2b2a0ab96',              // 2006-07-10
        '70fcdb09b8b18b50874603a6c99fcbcb',              // 2006-07-15
        'bd0e28eaccfa349da99ddd3880835725',              // 2006-07-16
        '71b0d16f90c6ef289fb9e0b08b44fd7c',              // 2006-07-16
        'df487ef8b49cead02c1a5d00a04288ce',              // 2006-07-21
        '6d02afe3993f73507d90e3f877d8eed8',              // 2006-07-23
        '5064a72d6d1acabba6a21f655481a5b5',              // 2006-07-24
        '33766d282efd27c3468309e546e247c5',              // 2006-07-29
        'c9551bfed82d85381e7fd1deb6fef0af'               // 2006-07-30
        ); 

    // Loop through each POST item and check for the headers 
    foreach($_POST as $MyKey => $MyPostItem) 
    { 
        $MyTempItem = strtolower($MyPostItem); 
        foreach($MyStrings as $MyString) 
        { 
            if(strpos($MyTempItem, strtolower($MyString)) !== FALSE) 
            { 
		      //eval('$errors[] = "' . $AntiSpamMessage2 . '";');
              die($AntiSpamMessage); 
            } 
        } 
    } 

    // Cleanup 
    unset($AntiSpamMessage, $MyReferrer, $MyURL, $MyHeaders, $MyKey, $MyPostItem, $MyTempItem, $MyHeader, $MyStrings, $MyString); 
	
    //END ANTI SPAM PART 2
Reply With Quote
  #17  
Old 08-06-2006, 09:46 AM
y2ksw's Avatar
y2ksw y2ksw is offline
 
Join Date: Aug 2003
Location: Italy
Posts: 1,418
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for adding your code modifications for 3.0.x
Reply With Quote
  #18  
Old 08-16-2006, 08:18 AM
mambo9 mambo9 is offline
 
Join Date: Apr 2006
Posts: 5
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hey peeps!

Great thought on this hack, we have just started to recieve loads of thoose nice rolex watch ads through there lol.

I installed via the pluggin system, set the max hyperlinks too 3.

But, logged in as admin, i now cant test the system it seems? It always renders me the Spam Filter: msg!

Any ideas ?
Reply With Quote
  #19  
Old 08-16-2006, 03:52 PM
y2ksw's Avatar
y2ksw y2ksw is offline
 
Join Date: Aug 2003
Location: Italy
Posts: 1,418
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by mambo9
Hey peeps!

Great thought on this hack, we have just started to recieve loads of thoose nice rolex watch ads through there lol.

I installed via the pluggin system, set the max hyperlinks too 3.

But, logged in as admin, i now cant test the system it seems? It always renders me the Spam Filter: msg!

Any ideas ?
Fixed & tested on both vBulletin v. 3.5.4 and 3.6.0
Reply With Quote
  #20  
Old 09-15-2006, 01:39 PM
adwade adwade is offline
 
Join Date: Aug 2006
Location: SouthEast, TN
Posts: 323
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by y2ksw
Fixed & tested on both vBulletin v. 3.5.4 and 3.6.0
So happy to have tripped across this -and- the fact it's v3.6 compatible! Will be installing tomorrow on my day off!
Reply With Quote
  #21  
Old 09-15-2006, 03:31 PM
y2ksw's Avatar
y2ksw y2ksw is offline
 
Join Date: Aug 2003
Location: Italy
Posts: 1,418
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You are welcome
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 11:58 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.04813 seconds
  • Memory Usage 2,317KB
  • Queries Executed 26 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (5)bbcode_code
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (6)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (3)pagenav_pagelink
  • (11)post_thanks_box
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (11)postbit_onlinestatus
  • (11)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete