2

我正在制作一个带有投票系统的网站(使用 PHP、JavaScript 和 MySQL),该系统允许人们匿名投票,但只能投票一次。

这意味着我的系统必须知道谁投票(因为我必须检查用户是否已经投票)但我不想将用户名或用户的 IP 地址存储在数据库中(破坏匿名性)。我不知道如何开始,我需要一些指导;我应该寻找什么?

4

2 回答 2

5

你最糟糕的问题是如何确保你的用户只投票一次,但这不是问题的重点:你问的是如何确保匿名性

这相当简单:将您用于单次投票的任何内容都视为密码,然后对其进行哈希处理。因此,为了论证的缘故,让我们说您正在使用 IP。我知道这样做的问题,但让我们假设这是您的选择。

  • 用户投票
  • 您对 IP 进行哈希处理并保存。
  • 您甚至可以将其保存在不同的位置。甚至不需要保存什么哈希投票了哪个选项。
  • 用户再次投票 -> IP-hash 已在数据库中。
  • 如果有人已经投票,不要放弃,不要回复“你已经投票”,但不要保存投票。这样,甚至无法知道这台机器是否有投票

请注意,这是关于匿名性,而不是关于如何确保单一投票。

于 2014-02-25T13:56:16.487 回答
1

正如 Lix 所说,在不存储 IP 地址或强制用户注册的情况下,真正唯一的方法是存储链接到会话的 Cookie,但这当然不是解决方案,因为 Cookie 很容易被清除。

您可以尝试使用持久性 Cookie 解决方案,例如evercookie,但如果我是一个网站的用户,它实现了类似的东西,这比注册更让我烦恼,而且无论使用什么方法,他们总是可以被规避以删除 Cookie/识别信息。

另一种可能性是另一种形式的持久性 Cookie,它在去年(或者是 2012 年 - 我忘记了)得到了很多宣传,它利用 Flash 来存储 Cookie。这些 Cookie 可以在多个浏览器中访问。一个这样的解决方案是flash-cookie,但同样,这可能会惹恼用户,并且不会 100% 可靠,因为并非所有用户都启用或安装了 Flash。

于 2014-02-25T13:47:27.347 回答