停止用户在网站上多次投票

时间:2009-02-21 10:06:13

标签: security voting

我打算在我运行的网站上添加一些投票/投票按钮。这似乎很容易,但我想阻止人们多次投票。一种解决方案是让他们在允许他们投票之前注册,但我不想强迫他们注册。

这样做有一种相当简单的方法吗?检查IP地址似乎不是一个好的解决方案,因为多个用户可能来自同一个IP地址。

Cookie可能是答案,但精明的用户可以删除cookie。有更好的想法吗?

16 个答案:

答案 0 :(得分:22)

抱歉,我没有有用的答案,我只是想分享一下我的经验。

大约8年前,我在一个运行在线民意调查的网站工作。我们曾经遭到一些机器人的攻击,我们的一些问题每分钟投票数百票。

我必须实施一些紧急检查:IP地址,cookie,我真的不记得还有什么。

在一天结束时,我们决定将民意调查结果下调。那些该死的机器人只是不在乎。 IP地址被欺骗,cookie被删除等等。

如果你真的需要民意调查是不可能的,我没有看到任何其他方式需要注册和使用验证码来避免机器人注册新帐户。

令人遗憾的是,这只是一个娱乐网站,民意调查了你最喜欢的颜色和类似的东西。

我们唯一没试过的是使用验证码,因为它们当时并不存在。这可能会减少非人类作弊行为。

不要把这个作为任何关于此事的专家意见,因为那是我与网上民意调查有关的唯一一次,但我记得我的故事并希望分享。

答案 1 :(得分:7)

我认为这实际上取决于您网站的性质以及您的搜索结果的准确程度。

使用Cookie似乎是最佳选择,但这取决于您网站的目标受众。他们是否足够精通技术以试图击败系统以允许他们多次投票?如果不是,风险应该相当低,这似乎是最好的方法。

正如您所说,检查IP地址可能过于严格。但如果所有选票都来自独特个体至关重要,这可能是更好的方法,即使这意味着一些合法的选民也不会投票。

我想到了另一种选择,但我不确定它是否可行。如果您可以将IP地址方法与基于硬件的检查(例如,NIC的MAC地址)相结合,这将消除由于LAN内的NAT而导致IP地址方法过于严格的限制。但是,如果您在不同的个人使用的网吧中安装了计算机,那将无济于事。

您还应该使用验证码(对于非注册帐户)来降低投票机的可能性。如果有人想要恶意投票多次,让他们更难以通过机器人自动化投票过程将有助于希望减少此类行为的发生。

答案 2 :(得分:6)

所以,你想让每个独特的人对每个项目只有一票。当一个人试图投票之前已经投票的人时,你想要检测到这一点。这意味着您必须识别该人。没有任何技巧可以解决这个问题。

现在,由于人们可以从任何计算机登录,因此识别计算机无济于事。这排除了IP检查和cookie,以及基于用户硬件的任何其他内容。

如何识别一个人?你不能。您只能通过提供独特的凭证来强制他们识别自己,例如社会安全号码(我认为这通常在韩国使用),护照号码或类似信息。当然,如果你不检查它,这没有任何帮助,因为任何人都可以组成一个10位数字,几乎没有碰撞的可能性。

即使用户注册本身并没有真正帮助本身 - 他们也可以注册另一个帐户。

答案 3 :(得分:4)

我想知道你是否可以让它成为一个多步骤的过程,使BOT变得更加困难。

注册或某些类似的任务会让你获得Cookie-A,然后当你投票时获得Cookie-B,但是如果你有Cookie-B并且没有合适的匹配Cookie-A你的投票不会计数。如果您尝试在已经拥有Cookie-A的同一台计算机上重新注册。过快地执行这些步骤被视为BOT。

我们进行了心理测试,有很多问题,用户必须做出深思熟虑的答案。在N秒以内的答案是有人只是按下按钮来完成它。我们从未告诉他们他们的答案太快了,我们只是将数据标记为“可疑”。

所以任何试图直接进入投票按钮的人都行不通。他们必须按顺序执行步骤A,然后执行步骤b,然后执行步骤C.

要重新投票,我必须清除cookie,重新注册,阅读blurb页面(无论如何),最后重新投票,所有这些都是正确的顺序,而不是太快。

要求启用JavaScript可能会有所帮助,就像Captcha系统一样。验证码可能有某种延迟 - “请看两个单词出现”,以便有两个单词,一个接一个地显示,但“真实单词”,以便它们可以很容易记忆,然后输入。任何回复“太快”是无效的。

在某些时候,人们会变得烦恼而不会打扰。

答案 4 :(得分:3)

显然,你需要识别用户,这样他才能投票一次。但确定用户并不意味着您必须弹出登录屏幕。如上所述,您可以要求发送电子邮件 地址,并将其用作身份证。

没有人提到stackoverflow的工作方式,如果用户在成为注册用户时有某些东西要赢(这里是reptutation),如果登录过程就像给出一个电子邮件地址一样简单,那么这是一个双赢的局面用户很乐意登录并投票,你很高兴让他登记和投票(每个问题只有一次)。

杰夫阿特伍德写了an article about the "login barrier",可能会给你提供线索。

答案 5 :(得分:3)

我曾经为比赛创建了一个投票系统。由于多人合法地使用相同的IP进行投票,因此我被禁止通过IP限制投票。因此,我使用了电子邮件确认方法,要求每个选民输入一个确认链接发送到的电子邮件地址,一旦点击,将激活他们的投票并阻止使用该地址的额外投票。

效果不佳。人们在各种免费网站上创建了数百个虚假的电子邮件地址。

有些令人惊讶的是,在决选投票中工作的是将电子邮件地址/投票对添加到数据库,但没有立即发送确认电子邮件。相反,我有一个cron工作每15分钟左右发送一批这些。这为注册许多地址的人增加了额外的复杂性,因为他们必须将它们全部打开,或者在将来的某个时刻记住每个地址的登录信息。

当然,对于有足够动力的人来说,仍然很容易被绕过,但在这种情况下似乎运作良好。

答案 6 :(得分:1)

我从未使用过这样的系统,但尝试通过浏览器的指纹来识别用户。此jQuery plugin结合了屏幕大小,颜色深度,用户时区和已安装的插件,以创建用户的唯一ID。绝对不是万无一失的,但这是一种不同的方法。

答案 7 :(得分:0)

没有准确的方法可以避免来自同一用户的多次投票,即使他们不删除Cookie,他们也可以使用其他浏览器或其他计算机。

答案 8 :(得分:0)

我认为你应该在他/她投票之前注册用户。您可以从用户那里获得一些信息以进行注册,因此他不会厌倦或打破他的注册。之后他可以根据需要更新自己的账户。恕我直言,这是最好的解决方案。

答案 9 :(得分:0)

如前所述,没有“完美”的解决方案。

作为尝试不完美的解决方案,如何存储IP地址的哈希值和用户代理。

这意味着来自给定IP的不同用户仍然可以投票。

答案 10 :(得分:0)

使用基于Cookie的方法,对于网络上的大多数娱乐级民意调查都足够准确。远离知识产权限制。这意味着只有一个大公司的人投票,而且一个家庭中只有一个人可以投票。

答案 11 :(得分:0)

也有可能:

让用户投票并填写他的电子邮件地址。 用户收到一个确认邮件,其中包含他需要点击的链接以确认他的投票。

但是这样,用户也有一些开销。

或者与注册用户(不会被迫确认)一起进行此操作

答案 12 :(得分:0)

我知道这是一个老话题。在任何情况下,我建议使用evercookie(http://samy.pl/evercookie/)来跟踪已经投票的用户!

答案 13 :(得分:0)

一个人可以控制多少身份。你使一个人控制多个身份的难度越大,你的民意调查就越安全。

对于结果无关紧要的娱乐级民意调查,单一cookie方法就足够了。如果用户打开隐身窗口,则很容易规避。

如果您设置了注册障碍,可以使用基于OAuth的登录进行无缝身份验证,可以获得更好的保护,转换帐户以获得更多投票需要花费一些精力。但这并不能阻止那些绝望的人多次投票。

如果您在短信中发送确认码,情况会更好。虽然人们可能拥有多个电话号码,但拥有相当数量的电话号码来执行欺诈并不常见。但是这种方法对你来说是花钱的,而且可以通过服务器来消耗掉所有的短信。

如果你想要政府级别的民意调查,投票可以决定选举。 那么你应该让选民出现在登记办公室申请民意调查,并让他们从准备好的PIN信封中选择一个,其中包含他们在投票时可以输入的长哈希。 因此,除非组织者进行欺诈,否则选民不能。这也确保了匿名性。

答案 14 :(得分:0)

一个古老的问题,但需要探讨新的方法-如今,许多民意测验服务机构不懈地努力实施许多措施来避免重复投票,并不断调整其系统以应对人们引入规避规避等新方式。自己做这件事本身就是工作。

他们甚至提供品牌。而且大公司使用它们,因此您的公司看起来似乎不适合外包民意测验。


如果您需要自己做。

正如已经说过的那样,注册是唯一可以肯定的方法。如果避免重复投票真的很重要(即,不仅是偏爱颜色或琐碎/有趣的事情),那么还可以将投票限制为发送给他们注册时使用的电子邮件的链接。

尽管仍然不能提供可靠的证明(什么也没有),至少您要强迫他们拥有他们可以访问的真实电子邮件地址。 对于用户投票而言,这并不是什么大麻烦,但是很容易获得很多虚假的投票-注册,等待电子邮件,使用链接等。

答案 15 :(得分:-2)

您已经命名了所有可用的解决方案。 ;)现在决定你的任务。

我建议结合IP和cookie检查。