2011-04-11 84 views
1

我已经实现了在线视频投票系统,其中访客只能在任何一天投票一次。我使用他们的电子邮件地址和时间戳的组合来确保每一次投票在当天都是唯一的。如何防止游戏投票系统,人们可以每天投票一次?

正如你可能猜到的,这导致人们通过在mailinator.com等网站上注册一次性电子邮件地址来游戏系统,所以我想知道是否有人试图实现任何其他投票算法,允许多个选票相同人。另外,这种设置意味着如果视频#1与视频#2相比拥有更多的人,则视频#1已经处于不公平的优势。

我在考虑排名系统,但我不完全确定如何防止任何人使用虚假的电子邮件地址来游戏系统。我试图解决的问题是这样的:

鉴于3个视频,A,B和X的有5人在里面,B具有2和X具有4
假设X是三人中最好的视频,人们可以每天投票,是否有投票系统可以帮助“B”崛起?

就像我说的,我在我的建议排系统,会断定,如果#2量的数量超过了#1,它是安全的假设应该成为最后的赢家,但似乎不完整的。

有没有人处理过这样的事情?请记住,这些结果相当低(我们平均约500张/ 7天),所以2人真的可以有所作为。

这是在共享主机环境中的LAMP(PHP)堆栈上(如果有帮助)。另外,如果您想知道为什么我们允许同一个人进行多次投票,那是因为上级意识到这有助于推动网站流量,并且他们非常喜欢看到图表上升(尽管事实上后续的命中是相当无意义的)。

在此先感谢,如果您需要任何其他信息,请让我知道。

+0

听起来像[EverCookie](http://en.wikipedia.org/wiki/Evercookie)的良好用法。 – drudge 2011-04-11 18:01:41

+2

@jnpcl:这些东西应该被禁止。改为使用真实的登录系统(或使用OpenID)。 – 2011-04-11 18:08:42

+0

@亚历山大:道歉,讽刺在文字中丢失。我应该添加一个笑脸。 ;) – drudge 2011-04-11 18:17:25

回答

2

你实际上是在问两回事:

首先,你怎么可以防止有人利用系统漏洞?这很难处理。你可以通过要求注册,像SO这样的最低声誉或其他限制来提高投票的条件,但最终你希望做的只是减少作弊,而不是消除它。考虑到人们多次成功进行实际政治选举,然后评估可以消除您网站上所有作弊的可能性。

其次,您如何为不同的项目提供公平的质量排名,这些项目可能会有不同的受欢迎程度,并且会在不同的时间出现? Randall Munroe描述了一个非常好的解决方案here。该文章链接到实际的算法,这是相当直接的实施。

+0

您在XKCD上链接的解决方案看起来可能有一些问题。我将进一步研究。谢谢! – leo 2011-04-15 18:47:54

1

没有登录系统,没有解决您的问题的方法。除非您为他们提供真正的身份验证系统,并需要几个步骤来创建帐户,否则人们会一直打败您的系统。顺便说一下,OpenID非常适合这种情况。

不要使用基于重量cookie的东西(特别是不要使用Evercookie)。这对用户的隐私是一种冒犯。我永远不会想要我的电脑上的僵尸cookie。

如果他们一直在玩游戏,那么除了手动标记垃圾账户并删除相应的投票之外,您无能为力。

或者你可以做一个基于声望的系统,并且需要投票的最小代表(比如StackOverflow)。

如果您想要一个快速安全的工作解决方案,请参阅OpenID

+0

openid不会解决识别在线人员的问题,而不仅仅是账户。它只会将问题从稍微坚决的问题转移到稍微更坚决的问题上。 – hop 2011-04-11 18:45:52

+0

@hop:Openid具有以下优点:1)易于实现2)由于打开许多帐户的时间很长,所以不鼓励人们创建大量帐户。仅此一项就会阻碍一些用户。代表事情也很好。 – 2011-04-11 19:00:35

+0

“一些用户”正是使这个解决方案无用的东西,而现在什么是“冗长”的过程(我非常怀疑)将在明天实现自动化。正如我所说的那样:它只会将问题转移到那些稍微更坚决的作弊者身上。 – hop 2011-04-11 19:20:38

1

有这种问答&在网络的平台 - 不知道你是否听说过 - 这就是所谓的stackoverflow.com ;-)

也许你可以在这个网站采用的评分系统?我发现只允许具有给定评级的用户以多种方式操纵系统是非常巧妙的。您可以按其账户的年龄(例如投票后2周内的投票数)或某种声誉系统来选择用户。

+0

我发现巧妙的是不允许用户以零代表(即虚拟帐户)以任何方式操纵系统。 – 2011-04-11 18:18:22