]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - doc/todo/anti-spam_protection.mdwn
Add ikistrap plugin for ikistrap theme.
[git.ikiwiki.info.git] / doc / todo / anti-spam_protection.mdwn
1 The spammers have just found my ikiwiki.  I have my main pages locked but allow open changes to my discussion pages and in the last few days one page in particular has been overwritten by spam about nine times, each edit was from a different IP address.
3 <http://adam.shand.net/iki/recentchanges/> (sorry for the funny formatting, I upgraded to the latest version and haven't tracked down what changed yet)
5 I'll probably lock down my discussion pages to require a login of some sort and hopefully that will slow them down.  Is anyone else seeing problems on their wiki? 
7 As far as techniques for reducing spam I've found the [MoinMoin technique](http://moinmo.in/HelpOnSpam) of refusing to allow page saves with [known spam URLs](http://moinmo.in/BadContent) combined with a group maintained list of URLs to be fairly effective.
9 Cheers,
10 [[AdamShand]]
12 > I have yet to hear of any spammer using openid.. --[[Joey]]
15 >> Mh.. well. I know this problem, too. I leave the Discussion sites open for no registrations, so that visitors can easily write a comment to this specific blog entry without the need for registration. (This would be the same behaviour, as many blogging engines are using). Maybe it is possible to wrote a plugin that would scan the text which is submitted via spamassassin or something similar. (Using this combined with known spam URLs would maybe reduce the load of the server if there are many webpages which are getting editted by someone). If you like this idea Joey I might be interested to write such a plugin after my exams this and the next month. :) -- [[Winnie]]
17 You might look at the Wikipedia page on "Spam\_in\_blogs" for more ideas.  In particular, would it be possible to force a subset of the pages (by regex, but you'd choose the regex to match those pages which are publicly writable) to use rel="nofollow" in all links.
19 > I just wanted to leave a link here to the [[todo/require_CAPTCHA_to_edit]] plugin patch.  Unfortunately that plugin currently interacts badly with the openid plugin. -- [[Will]]
22 ---
24 Ikiwiki now has a checkcontent hook that plugins can use to see content
25 that is being entered and check it for spam/whatever.
27 There is a [[plugins/blogspam]] plugin that uses the blogspam.org service
28 to check for common spam signatures. --[[Joey]] 
30 [[done]]
32 ----
34 I am sorry to say that neither those solutions are sufficient for a site that allows anonymous comments. blogspam lets thousands of commits through here, as i described in [[todo/commandline_comment_moderation]]. Now, maybe I didn't configure blogspam correctly, I am not sure. I just enabled the plugin and set `blogspam_pagespec: postcomment(blog/*) or */discussion`. I have also imported the blocklist from this wiki's ikiwiki.setup, generated from [[spam_fighting]]. I have had to add around 10 IPs to that list already.
36 It seems to me a list of blocked URLs or blocked IPs as mentionned above would be an interesting solution. blogspam is great, but the API doesn't seem to support reporting IPs or bad content back, which seems to be a major problem in working around false negatives. I'm tempted to just remove the `done` tag above, because this is clearly not fixed for me here... --[[anarcat]]
38 ----
40 Update, ~3 years later... Situation hasn't improved much. If anything, things are worse now as [blogspam](https://blogspam.net/) was [almost shutdown](https://blog.steve.fi/possibly_retiring_blogspam_net.html). It's still up, but it's unclear if it's doing anything. I just went through comment moderation for about 3000 comments, all of which were spam, except *one*. And the only reason I went there is because I *asked* someone to comment on a blog post instead of writing me privately so I *knew* there was something for me there. That was more than 5 months of comments backlog, and it was obviously too much to review by hand, so I removed things according to some patterns. For example, anything with phpBB-like markup is probably spam, so I cleared those up:
42     find .  -name '*._comment_pending' -a -print0  | xargs -0 grep -l -Z '\[url=' | xargs -0 rm
44 That removed 2265 comments. I reviewed the remaining 643 by hand and deleted them all. I used [ikiwiki-comment-moderate](https://gitlab.com/anarcat/scripts/blob/master/ikiwiki-comment-moderate) to generate a list of IPs to block. The top 5 /16 blocks were:
46     18 112.5 China Mobile communications corporation
47     31 110.89 Chinanet
48     36 36.250 China Unicom
49     44 112.111 China Unicom
50     45 36.248 China Unicom
51     74 175.44 China Unicom
53 (Left column is the number of IPs affected in the /16. Middle is the /16. Right is an assertion of the owner.) Attacks came from 104 distinct /24 blocks and 66 distinct /16.
55 Now, I don't want to point fingers, but there sure seems to be some problems with china there and i'm tempted to just block those entire networks. :/
57 Anyways... Someone mentioned Spamassassin in the original request, and I just [read](https://lwn.net/SubscriberLink/769917/130e156925fc690e/) that some people *are* using spamassassin for website spam control. Has anyone gave that a try? --[[anarcat]]
59 ----
61 Another note that might be of interest here... One of the things that script was doing was to generate a list of IPs to be inserted into `ikiwiki.setup`. Unfortunately, that doesn't seem to work:
63     $ ~anarcat/bin/ikiwiki-comment-moderate 
64     found 165 pending comments
65     IP distribution:
66           1  ip="110.86.179.146"
67     [...]
68          10  ip="175.44.35.10"
69          11  ip="175.44.35.236"
70     banlist would look like:
71     - ip(110.86.179.146)
72     # 112.111.162.159 already present
73     # 112.111.163.216 already present
74     [...]
75     # 36.250.185.52 already present
76     # 36.250.185.55 already present
77     # 36.250.186.113 already present
78     - ip(59.60.123.211)
79     to remove comments from a specific IP, use this, for example:
80     find . -name '*._comment_pending' | xargs grep -l 'ip="$ip"'| xargs rm
81     to flush all pending comments, use:
82     find . -name '*._comment_pending' -delete
84 In other words, many of the comments in moderation are actually
85 supposed to be blocked, as their IPs are in the `banned_users`
86 list. Now I know my way around a UNIX system well enough to deal with
87 this another way - I'm thinking of fail2ban or a simple Apache rewrite
88 table (and it might easier and faster too) - but I wonder why those
89 IPs can still post comments when they are listed in
90 `banned_users`... -- [[anarcat]]
92 ----
94 I made a new TODO item for this, specifically to be able to block certain expressions. See [[todo/bad_content_support]] for a followup on that. -- [[anarcat]]