28

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

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

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

4

16 回答 16

24

对不起,我没有有用的答案,我只是想分享我的经验。

大约 8 年前,我在一个运行在线投票的网站工作。我们曾经被一些机器人对我们的一些问题进行投票,每分钟数百票。

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

最终,我们决定取消投票。那些该死的机器人根本不在乎。IP 地址被欺骗,cookie 被删除等。

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

可悲的是,这只是一个娱乐网站,上面有关于你最喜欢的颜色和类似内容的民意调查。

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

不要把这当作任何关于此事的专家建议,因为那是我唯一一次与在线民意调查有任何关系,但我记得我的故事并想分享。

于 2009-02-21T10:25:46.377 回答
8

我认为这真的取决于您网站的性质,以及您的结果需要有多准确。

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

正如您所说,检查 IP 地址可能过于严格。但是,如果所有选票都必须来自独特的个人,这可能是更好的方法,即使这意味着一些合法选民将无法投票。

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

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

于 2009-02-21T10:16:56.353 回答
6

因此,您希望每个独特的人对每个项目只有一票。当一个人试图投票之前已经投票时,您想检测到这一点。这意味着您必须识别此人。没有什么技巧可以解决这个问题。

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

如何识别一个人?你不能。您只能通过提供独特的凭据来强制他们识别自己的身份,例如社会安全号码(我认为这在韩国经常使用)、护照号码或类似的。当然,如果您不检查它,这将无济于事,因为任何人都可以组成一个 10 位数的数字,而碰撞的可能性很小。

即使让用户注册本身并没有真正的帮助——他们只能注册另一个帐户。

于 2009-02-21T10:28:24.577 回答
4

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

注册或一些类似的任务会给你 Cookie-A,然后当你投票时,你会得到 Cookie-B,但如果你有 Cookie-B,但没有合适的匹配 Cookie-A,你的投票就不算数。如果您尝试在您已经拥有 Cookie-A 可以检测到的同一台机器上重新注册。过快地完成这些步骤被视为 BOT。

我们进行了心理测试,有很多问题,用户必须做出深思熟虑的答案。不到 N 秒的答案是有人只需按下按钮即可通过它。我们从来没有告诉他们他们的回答太快了,我们只是将数据标记为“可疑”。

所以任何试图直接点击投票按钮的人都不会工作。他们必须按顺序执行步骤 A,然后是步骤 b,然后是步骤 C。

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

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

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

于 2009-02-21T13:32:40.330 回答
3

显然,您需要识别用户,以便他只能投票一次。但是识别用户并不意味着你必须弹出一个登录屏幕。如上所述,您可以要求提供电子邮件地址,并将其用作标识符。

没有人提到 stackoverflow 的工作方式,如果用户在成为注册用户时有什么可赢的(这里是声誉),并且登录过程就像提供电子邮件地址一样简单,那么这就是用户的双赢局面很高兴登录和投票,你很高兴让他注册并投票(每个问题只有一次)。

Jeff Atwood 写了一篇关于“登录障碍”的文章,这可能会给你一些线索。

于 2009-03-14T00:46:09.063 回答
3

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

它没有很好地工作。人们在各种免费网站上创建了数百个虚假电子邮件地址。

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

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

于 2009-09-07T15:12:48.720 回答
1

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

于 2011-09-28T23:35:30.803 回答
0

还有一种可能:

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

但是这样一来,用户也有相当多的开销。

或与注册用户(不会被强制确认)结合使用

于 2009-02-24T12:22:21.470 回答
0

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

于 2009-02-21T10:15:37.760 回答
0

我认为您应该在用户投票之前注册用户。您可以从用户那里获得一些信息来注册,这样他就不会感到无聊或破坏他的注册。之后,如果他愿意,他可以更新他的帐户。恕我直言,这是最好的解决方案。

于 2009-02-21T10:18:14.727 回答
0

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

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

这意味着来自给定 IP 的不同用户,拥有不同的浏览器用户代理,仍然可以投票。

于 2009-02-21T10:34:05.343 回答
0

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

于 2009-02-21T11:24:10.137 回答
0

我知道这是一个旧线程。无论如何,我建议使用 evercookie ( http://samy.pl/evercookie/ ) 来跟踪已经投票的用户!

于 2015-10-14T22:23:19.927 回答
0

一个老问题,但要触及新方法 - 现在有许多民意调查服务机构不知疲倦地工作以实施许多措施以避免重复投票,并不断调整他们的系统以应对人们引入的新方法来规避等。自己做这件事本身就是一份工作。

他们甚至提供品牌。大公司使用它们,所以你的公司不会因为外包民意调查而看起来很糟糕。


如果你需要自己做。

如前所述,注册是唯一可靠的方法。如果避免重复投票真的很重要(即,它不仅仅是喜欢的颜色或琐碎/有趣的东西),那么您还可以将投票限制在您发送到他们注册时使用的电子邮件的链接。

虽然仍然不是万无一失的(什么都不是),但至少你强迫他们拥有一个他们可以访问的真实电子邮件地址。这对用户投票来说并没有太大的麻烦,但是却让许多欺骗投票变得繁琐——注册、等待电子邮件、使用链接等。

于 2020-03-01T17:47:38.570 回答
0

这是一个人可以控制多少个身份的问题。您越难让一个人控制多个身份,您的民意调查就越安全。

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

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

如果您在 SMS 中发送确认码,那就更好了。尽管人们可能拥有多个电话号码,但拥有大量电话号码来执行欺诈的情况并不常见。但是这种方法对您来说是花钱的,并且可以被 DoSing 服务器滥用以耗尽所有 SMS。

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

于 2016-01-06T16:56:11.190 回答
-2

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

我建议结合 IP 和 cookie 检查。

于 2009-02-21T10:09:17.150 回答