Anti-Spam Methods and Resources
by
07 Jan 2012
Rating: (1 vote
- 5.00 average)
Spam can at times for many site Administrators become a never ending battle for months on end unless you implement ways to counter-act such... well perhaps we should call them "attacks" on your forum because they are truly unwarranted by everyone else other than the one responsible whether it be a human spammer or a spambot. Now some of you are thinking well what are we up against? Over the years I've noticed that sites can have both automated script derived "Bots" and/or Human "Bots" as well. Some may be confused by the fact a "Bot" could be human but more times than most they simply bypass the registration if any semi-decent security exist and then place it on "auto-pilot" if I had to describe it. What every site owner should realize is just like security on websites evolving because of spam, spam in-turn also evolves because we have both sides striving to beat the previous version of the other in a sense. Why are there "Spambots" well that's simple, there's pretty much various reasons for them but overall it's to promote and "spam" their content or links and high traffic sites are the primary targets so if your forum is large you can bet your bottom dollar they are trying to get in or have already! The focus of this article will be to provide some very useful information and methods to help you counteract the constant issue countless forum owners encounter with spam on their site. I would like to encourage everyone to post their methods and ideas on how to fight spam and I'll add each one to the original post just below thereby helping many make the changes required to give them a break for once! ____________________ *Please note that not all of these modifications or methods listed will work for you, some will work better than others, and some in combination will work best instead of just one being utilized. I'll also do my best to ensure that any combinations resulting in a conflict are identified in advance and marked w/ a *asterix therefor you should not implement two w/ a * at any given time. Legend: Blue *'s indicates these mods are similar in functionality and should not be used in conjunction with each other only one at a time. Anti-Spam Modifications:
*Over the last few months (as of August 2013) many forum owners are seeing an increase in spam registrations and in some rare cases the registration page is being hit so hard it's almost like a denial of service attack in a sense. If this sounds familiar try this mod by one of our Moderators: Be creative in your prevention methods! Here's a list of methods, utilities and modifications you could possibly benefit from with some helping cleanup if a spammer hits:
*Please note that Paul M recently added in a new modification prefix "Anti-Spam Options" so as new modifications are released, if the author chooses the prefix correctly you will start to notice more listed here for example: http://www.vbulletin.org/forum/forumdisplay.php?f=245&threadprefix=Anti-Spam+Options Methods:
Some vBulletin 3.x mods will work on vBulletin 4.x, here's a article by BirdofPrey5 that list quite a few compatible modifications. Another Method I have come up with has proven to be quite effective for myself and a few others I work for. Here is a example of how to ban spammers using the hourly cleanup cron job or cleanup.php by adding in code similar to the below HOWEVER please note this method is based on custom profile fields and requires you to manually monitor spam to determine it's patterns and repeated entries that make no sense plainly labeling the users as spammers. This method does not remove posts or anything of that nature it only bans the spammer to prevent further activity. The default profile fields in vBulletin are:
You have the ability to create new profile fields via AdminCP > User Profile Fields > User Profile Field Manager Example: http://www.yoursite.com/forum/admincp/profilefield.php?do=modify Using what a spambot enters into the few default fields can be used against them however it's not nearly as effective as utilizing more custom fields to help determine a pattern and fight against it! Here are descriptions of the default and other (custom) fields in the query shown so you can see how I'm going about this:
The key thing to note here is the fact you need to study new registrations and develop your own ways to identify the spammers using default and custom profile fields before a method like this will work effectively. *Please Note: This can affect your users in such a way it might be a complete disaster to sort it all therefor I recommend that novice forum owners not familiar with how this all works (sql queries in particular) to setup a test site and use that to test your changes on, you can easily clone your existing site and place it in a /testvb folder on your server (You need to .htaccess protect it per the license agreement) this way you don't slip up and cause a issue on your LIVE/Production site. PHP Code:
// Spam Management - Move all spammers based on profile fields to usergroup 8 i.e. Banned Users
Now we interpret the above query as: Update the user table and join the user table with the userfield table (these tables are separate, we join so we can compare and execute what we want to do) and set the users usergroupid to 8 (which is the Banned usergroup by default) where their Twitter Profile URL matches their Username AND (where) their LinkedIn Profile URL contains something like 12345 in any part of the field (why we use the %'s on each end so it reads the field and if for example they entered in 123456 it catches that because it contains 12345 - Also you may want to note that no one's LinkedIn profile is going to be 123456 i.e. http://www.linkedin.com/in/123456 well minus the one silly man who did just that "Erik Hammerquist" ) AND (where) their Interests is not empty AND (where) their Youtube Profile URL is not empty AND (where) their Twitter Profile URL is not empty AND (where) their Interests is like thier Youtube Profile URL AND (where) their Youtube Profile URL is like their Twitter Profile URL Logic and common sense tell you that, if you made the custom profile fields and use them in certain ways... that http://www.linkedin.com/in/123456 or https://www.facebook.com/123456 (even though that will redirect to https://www.facebook.com/ohmycarling the user in question would never enter in /123456 he/she would enter in /ohmycarling see my point?) and when you notice the word Man or Woman in the code shown below, well did you know the most common mistake a bot script makes is to fill in "Man" or "Woman" into the Biography field? I see it all the time and not even language differences cause someone to enter that in - Think about it! Now when we get into the != parts near the bottom this is required because when you close it out your comparing two fields using a like and if they were both empty it could cause issues because without the != if both are empty it will move them and possibly identify a normal user as a spammer and we certainly don't want to ban a innocent now do we? Certainly not so in other words be careful when creating your own query! If we are banning the user, let's go ahead and update their user title as well, this query compliments the one above: PHP Code:
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user AS user
PHP Code:
// ########################################################################
**To Test a query beforehand you can use SELECT for example here is a query to show you the results BEFORE actually running a query: Code:
SELECT * FROM vb_user AS user LEFT JOIN vb_userfield AS userfield ON user.userid = userfield.userid SET usergroupid = '8' WHERE userfield.field7 LIKE user.username AND userfield.field8 LIKE '%12345%' AND userfield.field3 != '' AND userfield.field5 != '' AND userfield.field7 != '' AND userfield.field3 LIKE userfield.field5 AND userfield.field5 LIKE userfield.field7; WARNING: TEST ALL QUERIES BEFORE YOU EXECUTE THEM! Do not perform any query on your database without doing a database backup and without knowing how to use it if required! Here are some links provided by Lynne to help you perform a backup:
Now let's see another example... You try to see how I used the logic here: PHP Code:
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user AS user
The query for usertitle update: PHP Code:
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user AS user
Session Table Issues? Here's a quick method if you happen to notice a sudden increase of the number online when nothing has warranted such behavior. Monitor your session table to see possible spammers online however a query like this is only effective if the bot logs in multiple times in which you will see different ip addresses (possibly hundreds) all as the same logged in user (OR the same IP address for countless users) and accessing different locations as well (some even show as logging in again). With it added to your cleanup.php cron job it will interrupt their actions on the fly and upon refreshing your session table you'll notice quite a few less entries. PHP Code:
$vbulletin->db->query_write("
PHP Code:
$vbulletin->db->query_write("
*Yes you can truncate the session table HOWEVER that is not advised, if you do truncate then it simply kicks EVERYONE off the site all at once and they must relogin and also navigate back to the page they were on prior. **If you have any issues using queries that you develop it may be due to using a table prefix in your database (recommended actually) so the perfect example of what to add in is right above us i.e. " . TABLE_PREFIX . " should be pasted before any Table names in the queries otherwise you will receive a error and here is a example: PHP Code:
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user
In the other queries shown that you can run via phpmyadmin directly you will need to modify them to add in the prefix so for example if you have a table prefix vb_ then it would resemble this: PHP Code:
UPDATE vb_user AS user
_________________________________________________ Contributions to this article from these valued community members:
|