views:

74

answers:

5

On my website we run a contest system and users vote for other user's content. We recently caught someone creating multiple accounts to vote multiple times (consecutive id numbers, and votes within a couple minutes). We would like to prevent that from happening again. Judging how Times handled their "Most Influential Person of the Century" poll, even the big guys get it wrong.

Currently we log User ID's, vote date, and IPv4 addresses (via $_SERVER['REMOTE_ADDR']).

What things can I do to prevent or make it more difficult for someone to vote fraudulently?

+5  A: 

Require user reputation. If you associate the right to vote with an user that has to have a certain reputation (i.e. by participating in your community for a certain time, and providing meaningful content), it becomes increasingly difficult for someone to automate the process of creating multiple identities.

In the end it is a balance between sufficient authentication, ease of access, and the value of the result (for you and the user) - and how you present the results.

relet
I voted you up because this is a good system, but the ability to vote someone up can also cause an insular bot community to become the de-facto "up-voters" and therefore allow themselves to be up-voted increasing their own rep.
Organiccat
Thanks. I voted you up for your comment to prove your point. ;) But an important part is also to find more objective values to express reputation than just other users' opinions. An example could be a metric on the quality of the content you provide.
relet
Rep on my site is generated differently. Bots would be possible, but difficult. Reputation is generated by interacting with the system (i.e. adding friends, playing the games, etc). This might work rather well.
Malfist
lol, stack overflow for the win
Bob Fincheimer
In terms of addressing the issue, this answer is like suggesting the guillotine for someone with a headache. The work required would be significant and opens a whole other can of worms (as Organiccat mentioned) as well as missing the basics of the issue such as cookies, IP address checks, sin-binning, etc. I agree with the idea, but the application doesn't suit a lot of websites
Alex
You can of course try to cure brain cancer with fifteen kinds of colourful pills. ;) I think we can agree that a lot depends on your approach in designing the website. But if you have to invest work either way, it better not be just tedious.
relet
User identities are indeed one of the most powerful tools you can have, and if these work for you, you can skip all the quacksalvery around IP addresses and statistics.
relet
A: 

Unfortunately it is very difficult to prevent fraudulent voting, when there is a will there is a way. However it is all about making it as inconvenient as possible to cheat the system.

Do your accounts require a unique email address with verification before you can use the account?

How often can users vote? If it is only once or once a day you could send off an email to verify the vote, this however could become a pain for legitimate users.

Not sure about the scale of the website, however when you begin talking about extremely large website such as Time's poll it is hard just to judge if consecutive votes are fake by looking at the IP address. Colleges and offices can often have hundreds of people on the same IP address. It is difficult to tell if it is one person behind the votes or if one person is going around to all of his/her friends on the dorm floor telling them to vote (can explain fresh signup/votes from the same IP address all around the same time).

There really is no answer to this question, just keep monitoring logs and remove votes which don't look legit.

evolve
A: 

As you are already doing, track IP addresses, along with vote times and disallow multiple votes from the same IP in the same time frame. This is only going to affect a few college students at most.

Another easier way to do this with secure voting is to force an email registration and confirmation. Some bot/spam site can still get around this by having their own domain, however you can then block domain registrations and voting from that site. This is the "most annoying" however most time consuming therefore leading to the least likely, in combination with IP addresses, to lead to heavy cheating.

The thing to remember is you aren't going to prevent all cheaters to your system, you can however mitigate them.

Organiccat
+1  A: 

Using IPv4 address, with browser signature ($_SERVER['HTTP_USER_AGENT']) hash.

If the vote come from different user, but in the same IP address, with the same browser, in a close timeframe window, it is probably a fraud.

If the time is too close, leading to an automated process, a captcha would solve it (but no one likes captcha on polls).

Dave
I agree with everyone here. There is no way to really prevent fraud, but there are ways to mitigate.Other suggestions as enforcing a valid user account, based on a valid email address (with a confirmation step). Keep tracking, use IPv4 and browser hash in a time frame. Limiting user votes to just one per poll...Everything that adds a bit of complication helps preventing fraud.
Dave
I had thought of this as well, but most large organisations on the same IP also generally have the same browser versions from my experience. If they do have different browsers across machines then they'll likely be able to install other browsers which would render the user agent check as they could just open another browser on there machine.
Alex
Not only big organizations, but colleges, or public net houses. This is part of the challenge. Inside IBM for example, is almost impossible to download something from rapidshare for free due this very reason. The suggestion to log User-Agent is most likely to prevent automation (for example, using JMeter with an accounts datasource, and a 100x loop, because JMeter does not send any headers by default).To better understand of this I suggest Chris Shiflett articles on PHP security.
Dave
A: 

I would use a combination of IP address vote throttling and cookies. Yeah cookies can be deleted but that'll stop the malicious type of person who also happens to be an idiot.

The IP address throttling will check if someone from that IP address has voted recently (say 10 minutes, whatever you think is fair depending on demographics or number of people voting from large organisation on the same IP address) and stop the vote being counted.

Combine those 2 with your use of User ID's already and it's as much as you can do realistically.

Alex