Banning, and what I want to do with it

Arantor

  • As powerful as possible, as complex as necessary.
  • Posts: 14,278
Banning, and what I want to do with it
« on July 12th, 2011, 12:56 PM »Last edited on July 12th, 2011, 05:15 PM by Nao/Gilles
While I'm still trying to figure out how to incorporate all the feedback from the package manager changes(!), I thought I'd talk about what I want to do with the ban system. Sorry in advance, this is going to be a bit of a novel: it's a big change, it's probably at least as controversial, and something about it is necessary anyway, so let's dive in.

The ban system as implemented is functional, as in it works but it's not overly elegant, it doesn't support IPv6 and I take the view that it doesn't solve the problem at hand, not one bit.

Let me deal with the IPv6 problem first, before I tackle the other stuff. The current system works on IPv4 addresses, which are x.y.z.a addresses, and whatever you put a ban (on IP address) on, it resolves to a range internally for each of the blocks. So a ban on 1.2.*.* becomes a ban internally on 1.2.0-255.0-255. Structurally, that makes sense, but IPv6 is much larger - instead of 4 blocks in the range of 0-255, you have 16 to contend with, though they're not written in decimal, nor written in the same way, but written as aaaa:bbbb:cccc:dddd:eeee:ffff:0000:1111 and similar.

There is one thing to consider, that addresses are divided in half in IPv6, the first half is for a 'network' and the second half for machines in that network, and it sounds that on the surface you could get away with just barring based on the first half only. Whether that will be successful or practical remains to be seen, but something tells me it's not that practical. It's not even that practical from a technical standpoint because if you're keeping that approach, you're not just comparing 4 values against ranges, but doing it for at least 8 - and you need to handle the high/low values, which is what SMF's and Wedge's system does right now.

I didn't implement IPv6 in Wedge in a way that would make this particular easy to implement for, because I took the view that it was the wrong way to be going about it, that any minor change extending the current direction of implementation to fit either 2x or 4x larger scope was an unnecessary performance headache, as well as a logistical one.

So, I sat back and thought about what I'd really like to be able to use in the ban system, and that lead me to my normal approach of trying to figure out what it is the ban system should be needed for, and what it should be able to do.


What is the ban system for? Primarily it's for getting rid of miscreants, and troublemakers. It isn't really a spam-solving solution, and it's not really for keeping users out that you're not interested in - it's for keeping users out that you don't want, which isn't the same thing.

Now before you start, I'm well aware that users do currently use it for keeping users out that they're not interested in, but on a variety of levels, I'm just not sure how viable that is, but we'll get on that in a minute.

So, dealing with troublemakers. The ban system lets you ban a user by name, email, IP or hostname. So you ban them, they come back under a new name through a proxy. Doesn't solve the problem much. For dealing with trolls and so on, there are better ways of dealing with them instead of slamming the door in their face - the tools used by Annoy User for example, to lock off certain features, plus the warning system that allows you to control whether they can post or whether their posts are moderated.

Of course, none of those things will solve the proxy problem, but the ban system wouldn't anyway. No, the solution is to gently turn up the heat so they don't realise that they're being pushed out, or at least discouraged from posting for whatever reason, and without it being obvious - so that they go and do something somewhere else.

If anything, the face-slam of the door is probably worse, not better, at making them go away - because what happens is that they don't have closure, they're not leaving of (kind of!) their own will, so you get all kinds of hassle as a result.


As for banning on email address, what is the hope of that? If you have miscreants who have their own domain, they can create as many emails as they like, so you just restrict the entire domain - it won't prevent them re-registering, though. So you get the extra account, you ban the entire domain, they try to register a third time and they still register - but this time they're banned and will take the hint. The problem is you've still got more accounts than you wanted in the first place.

Instead, then, how about limiting the email addresses up front? Put in the ability to restrict emails based on domain, either whitelisting or blacklisting certain domains as necessary. I know a number of users that restrict signups from mail.ru because of spam - if the domain is blacklisted, they can't even register (which is better than banning it).

There is, interestingly, a performance consideration here - and one for the better. If you ban based on email, the ban has to be evaluated more frequently than just locking it down at registration/change email time. In fact, that's going to be true of all bans - the more bans you have, the more you have to evaluate, and it has even a per-page consequence. By removing that query, you remove the performance hit, especially on long-term sites that have many bans, most of which aren't needed any longer.


Then we have IP addresses. Hello, darkness, my old friend. Putting aside the considerations of above with IPv6 addresses, the simple fact is that IP bans are really not that effective at keeping out miscreants because of proxies. That said, if you apply any of the measures in something like Annoy User, such users will likely notice it when they log out, or if they use another computer after logging out (so you can't even really use cookies on their computer) - not to mention the fact that IP addresses are shot to bits if you use mobile devices on 3G connections and similar. It's not like you can even reliably block proxy connections here.

With all that, IP bans are basically useless, except to the most technically inept of users - and they certainly don't keep out spammers, there are better ways of doing that which don't require tracking IP addresses, which are only going to be more and more useless for tracking in future as IPv6 goes mainstream.

The only salvage then is hostname, but even that... well, it's typically disabled in a lot of cases because of sluggish performance (usually because hosted machines are behind a laggy rDNS) meaning it's not a lot of use to you, and even if it wasn't, most of the time bans are not carried out on hostnames but on IP addresses, when really, hostnames would be more useful.

The solution then, might be to be able to blacklist certain hostnames if lookups are enabled and functioning, but to use it at a deeper level than keeping the conventional bans on it (there are performance considerations too), and then you could use it only if you needed it. What I might do is integrate that into our Bad Behaviour implementation, making it look like (to the user, anyway) as if their computer has a problem rather than anything else.


That wraps it up for the problems with the ban system and how they can be mitigated, but let's go further: dealing with miscreants needn't stop at fixing the current setup.

So, user-level problems, we deal with at the user level, not some global administrative level. I'm thinking we can expand the warning system as a result. Right now users can be watched, moderated or muted. It's trivial to expand that to full-on banned, and it would be useful to expand how the tail-off works. Right now you can set how quickly the warning level drops for all users (in points per day), but making that per user would make more sense, so that users who just need a time-out can be given one, and it can be done per user, rather than something across the board.

I'm also thinking we could influence other permissions, such as losing avatar and signature if the warning is over a certain level.


Just for fun, there's another subsystem I've been thinking about, that will debut in some form. Specifically, it will allow you to add rules to certain parts of the system, e.g. things to do when a post is made - so you can check the contents of a post, and if it contains words you don't like, it gets moderated and the user can be warned automatically.


Too long, didn't read (tl:dr;) summary:
* Removing the ban system as it is
* Making post moderation more prominent, probably even enabled by default (but with performance tweaks to make it run more efficiently)
* Email blacklist/whitelist on registration/change email, instead of the old method of banning
* Add hostnames to the possible rules that will be checked in our Bad Behaviour setup, so that instead of getting a 'banned warning', it looks like problems with their computer
* Replacing user-level bans with the warning system and making it more granular rather than as coarse as it is right now
* Adding functionality from my old Annoy User mod to encourage bad users to go away
* Expanding the warning system to more gradually remove powers, than just moderated and muted

I don't think I missed anything but if I did, I'm sure you're going to let me know about it!

And please, before telling me you need the ban system as it is, really stop and think about what you use in it and why you use it, then before complaining at me for breaking what you think is an essential feature, think about if there's actually a better way of doing it, like the above. Banning is not a particularly wonderful technique as explained - it doesn't solve any problem, it solves some of the symptoms. I'm trying to solve the deeper problems. Just because something is what it is, doesn't mean you have to accept it.

Oh, one more thing I forgot.

I want to introduce a 'Banned' membergroup that users go into. Not only does it have a visual consideration but a permissions one: it would let you reduce access to boards. I don't know yet whether I want to make that an on/off thing (like banning is now, except it would turn off some boards and maybe show others) or a gradual thing (as you get more warnings, you slowly see fewer and fewer boards)

But that would certainly make life interesting!
When we unite against a common enemy that attacks our ethos, it nurtures group solidarity. Trolls are sensational, yes, but we keep everyone honest. | Game Memorial

Re: Banning, and what I want to do with it
« Reply #31, on October 28th, 2011, 11:53 PM »
Ouch that's true I can see it getting very bogged down very quickly. I wish I had a good answer for that. There's the evercookie approach but ultimately that'd fail to a persistent user.

Re: Banning, and what I want to do with it
« Reply #32, on October 29th, 2011, 12:00 AM »
No, you'd have to do it server-side, and frankly the notion of embedding an evercookie just feels wrong. I may want to get rid of persistent pain users, but I don't want to do it by 'below the belt' means if at all possible.

I mean, we still have the same inherent problem with post moderation. Essentially I think it's going to have to be an extension of the post moderation system, just adding a flag to unhide it (and hide all traces of it being hidden, as it were) to the person it affects.

On a side note, would administrators continue to see these posts? What about moderators?

Re: Banning, and what I want to do with it
« Reply #33, on October 29th, 2011, 12:20 AM »Last edited on October 29th, 2011, 12:28 AM by zushiba
Administrators would see ghosted posts and I suppose moderators would be granted the ability to see them or not depending on the admin's preferences.

I like the idea of ghosted posts being collapsed ala reddit where a post is so downvoted it simply falls off the thread or on the wow forums a post that garners enough dislikes is greyed out and replaced with comment deleted for X.

something like this.

I was thinking, if I were designing the system it might be worth it to simply remove ghosted posts from the actual table altogether, saving copy to another table and modding the way the forum displays threads on an account level basis. That way the forum isn't doing any extra work for regular users at all, it shows them the actual content of the thread and the only time it does any extra work is when an admin, moderator or the affected individual see a thread.

Re: Banning, and what I want to do with it
« Reply #34, on October 29th, 2011, 12:25 AM »
Well, we're looking at implementing deletions much like that anyway (as opposed to the current recycle bin approach) which means it's just another flag to play with. Essentially, the current flag used for approved/not approved is looking to be renamed to a general status flag for that post.

So approved/not approved, deleted, and essentially ghosted, are all variants on the post's status, and can be excluded as such. In fact, thinking about it, that would mean we could create a SET for it, and apply it as a filter, and if it's suitably indexed it shouldn't be too much of a problem to work with, though benchmarking will of course need to be done (on a big enough scale to validate that it isn't going to hurt too much compared to where we are now, though it may even improve things, you never know)

There's an awful lot of other stuff going on at the moment that means it's going to be a little while before I attack this in particular but it is going to get done :)

On a related anti-troll note, it is (and has been for some time) to deny problem groups from given boards (something not readily possible in SMF) so that you can create a 'Sin Bin' or similar group and just give them only a single board to vent in, perhaps to appeal their sanctions.

Re: Banning, and what I want to do with it
« Reply #35, on October 29th, 2011, 12:35 AM »
That would be pretty great. The ability to individually flag posts could have a great many uses. Flagging a post as correct in a thread of particularly useful which would change it's style to draw attention could be cool. The ability to jump to certain types of flagged posts in a thread similar to how on the wow forums you can jump ahead in a 60 page thread to one posted by a community manager for instance.

Could be a good way to help users quickly find information they might be looking for in a large thread instead of wading through post after post to find it. Moderators could flag a certain post and it'd maybe throw up a button at the top of the thread somewhere with a custom title that'd take you to said post.

A hundred years ago when I worked on starmen.net's forums we had perhaps 500 active users daily it was necessary to jail some users. We were using FudForum at the time and I had created a Jail'd user group which would take priority over all other permissions aside from administrative permissions and effectively jail a user. Giving them access to the Jail forum that no one else would normally see where they could plead their case and a moderator would answer.

It was extremely effective. We went from banning 2 or 3 people a week to 2 or 3 people a month.

Edit: maybe it was more like 100 active users, but it was a lot :P

Re: Banning, and what I want to do with it
« Reply #36, on October 29th, 2011, 12:53 AM »
Well, the different ways to flag posts raises all kinds of other issues that I don't really want to get into at this stage, as it has all kinds of interesting side effects (not least how a mod would extend it and still have it be done efficiently; with the method I have in mind, there would be a limit of 64 tags that could be attached to a post, but configurability would be... limited)

Actually, thinking about it, this would be useful in solving another issue that I had; I want to be able to provide a style hook of some description to say 'this post was made by the admin' or 'this post was made by a moderator', and I'd never been able to figure out a way of doing it before that made sense (without querying for the users and their permissions each page load) - so while the base might not make use of it, it would be trivial to style a staff member's post much as Blizzard's forums do.

The downside to that method is that it has to be maintained manually and it causes trouble if you demote someone, but it is certainly food for thought (and has yet other consequences that I can envisage)

Note that I'm not thinking of an 'arbitrary' set of tags. It would, for the sake of efficiency, be up to 64 pre-defined tags in the system that would be attached to a post, and adding new ones potentially would cause big issues. (There's a field type in MySQL called SET. It lets you set 64 tags which are either attached or not attached in that value. But it compresses to use the minimum number of bytes. 1-8 fields = 1 byte, but 9 fields = 2 bytes. If you add that ninth field after the table is created, you have to go through and shunt all the data for every row along to fit it in... Hence not making it particularly extensible. But it would be fast.)

And yeah, the Banned group is something I've long thought about implementing. There's a bunch of tricks needed internally to make it work properly (and to make it function meaningfully as a banned group, like not letting you delete it, for one thing) and that users would likely go in and out of it at a different rate to normal assignment, so it would be managed by the system instead. It's complex!

Re: Banning, and what I want to do with it
« Reply #37, on October 29th, 2011, 01:04 AM »
I could see that creating an additional problem of which value takes precedence over another. Say a post is flagged a ghosted, posted by a moderator and selected as some other flag like "correct answer". Which style would the post receive?

Re: Banning, and what I want to do with it
« Reply #38, on October 29th, 2011, 01:09 AM »
It doesn't really matter how you did it, if you can attach two or more states to a message that are not expressly exclusive, precedence is going to be a problem. (Even attaching arbitrary tags would have the same problem)

If it's ghosted, I'd argue that should be the most prominent one. After that, moderator. However note that I don't see 'correct answer' being a core item, which does make me think about making it arbitrary states and putting it in a separate table - though that is irrelevant as far as precedence is concerned.

Generally, selectivity is the usual criteria for determining precedence (that something more selective takes precedence over something general) - I'd argue that ghosting is going to be more selective than moderator/admin posting and so should take precedence. (Though, why would you ghost either a moderator post, or a correct answer?)

Re: Banning, and what I want to do with it
« Reply #39, on October 29th, 2011, 01:55 AM »
Perhaps you have a Moderator gone rogue and had to action him or her in a manner that caused a post to be ghosted. Though that's easily taken care of by having ghost set as highest priority. I guess I'm thinking more along the lines of secondary tags not what would be considered a core item stacking up.

Re: Banning, and what I want to do with it
« Reply #40, on October 29th, 2011, 01:59 AM »
Yes, I realise that's the problem, as soon as it was mentioned that having multiple tags on a message was on the cards, I realised it would be a problem, being core or not is actually totally irrelevant.

Re: Banning, and what I want to do with it
« Reply #41, on October 29th, 2011, 07:25 PM »
Just wanna say one thing about banning and stuff...

I think that in the last 3 months, I've only got one spam message here on wedge.org.
And that's after defining a couple of questions at install time, and using Pete's captcha. I could actually do without the ban system...
I don't think that anything can beat custom questions anyway!

Re: Banning, and what I want to do with it
« Reply #42, on October 29th, 2011, 07:30 PM »
Let me draw your attention to one thing, from the OP.
Quote
What is the ban system for? Primarily it's for getting rid of miscreants, and troublemakers. It isn't really a spam-solving solution, and it's not really for keeping users out that you're not interested in - it's for keeping users out that you don't want, which isn't the same thing.

Now before you start, I'm well aware that users do currently use it for keeping users out that they're not interested in, but on a variety of levels, I'm just not sure how viable that is, but we'll get on that in a minute.
I never intended to overhaul the ban system to keep out spammers because of that very assertion, it's for the trolls etc, that don't take no for an answer and don't give up at a little bit of resistance. People like our friend Clara, for example. The idea is that instead of having a generic blocking system, it should be people-centric to curtail their activities as necessary.

Custom questions do a lot of it, and the custom CAPTCHA is effective in that it hasn't yet gone mainstream and thus not yet been examined or broken by the likes of xrumer, because it's not worth their time and effort to do so - yet. It will, though, as and when Wedge gets popular, however the custom question angle does make a lot of difference.


Re: Banning, and what I want to do with it
« Reply #44, on October 29th, 2011, 07:54 PM »
*nods* But that's only in terms of spammers actually getting as far as registration - spammers hammering away trying to get in is still a silent issue that's present, and is really what butchs' Forum Firewall was designed to solve.[1]

Mind you, people are realising that Baidu is a problem even though it's a 'legitimate' site, it's a bit heavy on the accessing, so I'm not even sure I want to unblock it from the current exclusions in our Bad Behaviour implementation.
 1. Though, I find it hilarious that he's written in a 'no SMF fork can make use of any of the ideas in this mod' which was written almost entirely because he thought I was trolling him. Sad really, the guy has some good ideas, but has a lot of bad ideas about execution of them.

Re: Banning, and what I want to do with it
« Reply #45, on October 29th, 2011, 11:25 PM »
Quote from Arantor on October 29th, 2011, 07:54 PM
Mind you, people are realising that Baidu is a problem even though it's a 'legitimate' site, it's a bit heavy on the accessing, so I'm not even sure I want to unblock it from the current exclusions in our Bad Behaviour implementation.
Google hammers my site more than Baidu, which seems... interesting.