SEOClerks

How to Stop Forum Spam - Anti Spam System Implementation



Write the reason you're deleting this FAQ

How to Stop Forum Spam - Anti Spam System Implementation

This is second chapter of How to Stop Forum Span. Before I specify agenda for this tutorial, let me make it clear that the tools which I mentioned in last tutorial are no way related or coded by me. If you want, you can use alternative tools like fassim (another anti-spam system) as well. In this episode, I'll discuss methods you need to implement on your forum. It has nothing to with use any 3rd party tool or implementation. So, prerequisite for implementing this tutorial is to know coding related to forum.

I'll be listing few tricks, you can use one or all of them together as anti spam methodology. Now, without further delay I'll start listing tricks you need to implement on your forum to keep spammers away.

  • Activate account after Email verification: Whenever somebody/anything registers your forum, you need to send an automated mail with activation code to the email id, used to register the forum. For implementing this, you will need smtp server or a service which can do this automatically.
  • Send password to Email ID: When user is registering to your forum, never ask for password. Send a separate mail (different from activation mail) to users email id which has randomly generated password. Make sure you send this mail at least after 10 minutes of users registration. It is because many users/bots use fake email id valid only for few minutes. So, if a email id isn't valid or expired then that user will not be able to login to your forum. This is the one the full proof way to keep fake or spammers users/bots away!
  • Have limit on Posting URLs: You need to put a threshold on number of post a user should post before posting a url or image. It can 10 or 50, it depends on your choice. It does have evil side, that is, genuine new users who want to share images or genuine link will have restriction to post. But you have to deal with that, as this tricks keep spammers away! Also, if a user is genuine he/she will probably will come back to your forum again and again and ultimately cross threshold to share useful stuff.
  • Don't allow new users to have Signature: You need to implement some threshold for putting signature as well. I mean once user crosses that threshold, he/she will be eligible for having signature. Or you can allow every one to have signature but only after crossing threshold they will be able to use url in there signature ;)
  • Award good members & Moderators: Have a report button/link (just like this forum has) after every post, so that moderators or reputed members of your forum can report spam post. You can have contest for good member who reports genuine bad post. It will help you curb spam effectively!

There are few more ways to stop spammers, but if you implement tricks I shared in this installment and previous tutorial then you should be able to stop more than 80% of spammers. Rest can be taken care by moderators and reputed members. How to Stop Forum Spam - Anti Spam System Implementation

Comments

Please login or sign up to leave a comment

Join
angie828
Great tutorial for all those that are getting bombarded with lots of spam.



Are you sure you want to delete this post?

ralph101
Spam is awful...loved this post.



Are you sure you want to delete this post?

stefang
My Burning Board Forum is hitted hard by spammers for several month now but with the tool Stopforumspam everything got ok. It bans automatically all of this sign ups so they can´t even change their signature or something. I get 1-2 mails about that every day and don´t have to react by myself. Not a single user was accidently banned.



Are you sure you want to delete this post?

shubh
I like your four point but this is also not full control on spam.



Are you sure you want to delete this post?

angie828
I like your four point but this is also not full control on spam.


May not be full control but it will help a lot.



Are you sure you want to delete this post?

evie
Any spam control is better than non at all.



Are you sure you want to delete this post?

Miken34
NIce share here.



Are you sure you want to delete this post?

loulou
So many forums could use this. there is so much spam on some of them!



Are you sure you want to delete this post?

Order Now
Process Time: 0.26879382133484

Possible Duplicate queries found!
MatchCountSQLScript
SELECT * FROM seoclerks.banned_bot_ip WHERE ip='216.73.216.114'1SELECT count(id) as total FROM seoclerks.banned_bot_ip WHERE ip='216.73.216.114'

/opt/clerks-staging/docroot/include/functions/includes/security.php 1090 IsIPBannedBot() include_once()

SELECT * FROM members_ledger WHERE ip = ? AND added>=unix_timestamp(NOW())-864001SELECT querystring, added FROM members_ledger WHERE ip = ? AND added>=unix_timestamp(NOW())-86400

/opt/clerks-staging/docroot/include/functions/includes/security.php 398 fetchMemberLedger() include_once()

SELECT * FROM `questions` as q JOIN categories_faq as c ON q.catid=c.CATID WHERE (q.status=1 OR (q.status=2 AND userid='') ) AND q.quesid='10665'1SELECT q.*, c.seo as CatSEO, c.name as CatName, c.parentid FROM `questions` as q JOIN categories_faq as c ON q.catid=c.CATID WHERE (q.status=1 OR (q.status=2 AND userid='') ) AND q.quesid='10665'

/opt/clerks-staging/docroot/viewfaq.php 496 () ()

SELECT * FROM seoclerks.members WHERE USERID='3'1SELECT * FROM seoclerks.members WHERE USERID='3'

/opt/clerks-staging/docroot/include/functions/includes/member.php 445 GetAllUserDetails() ()

SELECT * FROM categories_faq WHERE CATID='52'1SELECT CATID, seo, name, metatitle, h2header, metakeywords, metadescription, metaheader, parentid, image_name FROM categories_faq WHERE CATID='52'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() GetCategorySeoFromType()

SELECT * FROM seoclerks.members WHERE USERID=31SELECT googleplus_profile FROM seoclerks.members WHERE USERID=3

/opt/clerks-staging/docroot/include/functions/main.php 16914 GetGooglePlusProfileFromId() ()

SELECT * FROM ratings_faq as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=10665 LIMIT 51SELECT m.username FROM ratings_faq as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=10665 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM answers a, seoclerks.members b WHERE a.quesid='10665' AND a.userid=b.USERID and b.status='1' AND a.status=1 ORDER BY a.combined_votes DESC, a.date_answered asc1SELECT a.answer, a.USERID, a.upvotes, a.downvotes, a.ansid, a.parentid, a.combined_votes, a.date_answered, b.username, b.userlevel, b.profilepicture FROM answers a, seoclerks.members b WHERE a.quesid='10665' AND a.userid=b.USERID and b.status='1' AND a.status=1 ORDER BY a.combined_votes DESC, a.date_answered asc

/opt/clerks-staging/docroot/viewfaq.php 1245 () ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48390 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48390 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48391 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48391 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48392 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48392 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48393 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48393 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48394 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48394 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48395 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48395 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48396 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48396 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48397 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=48397 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

UPDATE questions SET total_views = total_views + 1 WHERE quesid='10665'1UPDATE questions SET total_views = total_views + 1 WHERE quesid='10665'

/opt/clerks-staging/docroot/include/functions/main.php 1765 update_Faqviewcount() ()

SELECT * FROM questions WHERE quesid!='10665' AND status='1' AND (question like '%How Stop Forum Spam - Anti Spam System Implementation%' OR question like '%Stop%' OR question like '%Forum%' OR question like '%Spam%' OR question like '%Anti%' OR question like '%Spam%' OR question like '%System%' OR question like '%Implementation%') -- ORDER BY RAND() LIMIT 151SELECT quesid, question, seo, userid FROM questions WHERE quesid!='10665' AND status='1' AND (question like '%How Stop Forum Spam - Anti Spam System Implementation%' OR question like '%Stop%' OR question like '%Forum%' OR question like '%Spam%' OR question like '%Anti%' OR question like '%Spam%' OR question like '%System%' OR question like '%Implementation%') -- ORDER BY RAND() LIMIT 15

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() ()

SELECT * FROM seoclerks.members WHERE USERID='318' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='318' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='147' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='147' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='43' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='43' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='1508' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='1508' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='498' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='498' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM members_ledger WHERE script='/opt/clerks-staging/docroot/viewfaq.php' AND querystring LIKE '%id=10665%' AND added>=UNIX_TIMESTAMP(NOW())-1200 GROUP BY USERID 1SELECT USERID, username FROM members_ledger WHERE script='/opt/clerks-staging/docroot/viewfaq.php' AND querystring LIKE '%id=10665%' AND added>=UNIX_TIMESTAMP(NOW())-1200 GROUP BY USERID

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() ()

SELECT * FROM categories1SELECT * FROM categories

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() parseRedundantQueriesCache()

select * from categories_software order by name asc1select * from categories_software order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_GetSoftwareCategories()

select * from categories_wanttobuy order by name asc1select * from categories_wanttobuy order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_wantcategories()

select * from categories_wanttotrade order by name asc1select * from categories_wanttotrade order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_tradecategories()

SELECT * FROM seoclerks.members WHERE USERID='632.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='632.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='1895.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='1895.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

select * from categories_faq order by name asc1select * from categories_faq order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_GetFaqCategories()

Invalid SQL

count(*)sql1error_msg

Expensive SQL

Tuning the following SQL could reduce the server load substantially
LoadCountSQLMaxMin

Suspicious SQL

The following SQL have high average execution times
Avg TimeCountSQLMaxMin