投票系统中的唯一ip


Unique IPs in a voting system

我正在为我的PHP/MySQL网站创建一个投票系统,我想确保一个用户只能投票一次。做这件事的好方法是什么?到目前为止,我已经想到并半实现了以下内容:

  • 使用IP和投票在数据库中存储个人投票。这样做会造成系统臃肿,但确保每个用户都有一票。

  • 在用户端存储一个cookie来检查他们是否投票。这是最简单的,但显然用户可以直接禁用cookie。

最实用的方法是什么?欢迎提出任何其他建议。

The untainable - perfect:(唯一政府编号)

  • 用户使用可验证的唯一标识符(如社会安全号码或护照号码)进行投票

The Close-Enough-For-Reality: (Email/第三方认证)

  • 用户注册一个带有电子邮件地址和密码的帐户(或google/facebook)
  • 1个email地址= 1票
  • 用户不能清除cookie并获得额外的投票,应用程序不会关闭1000个共享ip

善意但虚假的 (IP地址)

  • 办公楼:同一外部IP上的1000个用户被关闭
  • 大学:在教室里连接无线网络。投票。搬到下一个教室去。重新连接并再次投票

Crash-And-Burn (Cookies)

  1. ctrl shift del enter

如果您希望有机会审计您的系统,那么您应该在数据库中存储尽可能多的信息。如果你记录了很多,那么即使存在投票欺诈,你也可以检测到它并取消那些投票。

第二个方法是完全不安全的。如果用户想再次投票,他们可以删除cookie,而你将无法检测到这已经发生了。

重要提示

IP地址和人之间不存在一对一的映射关系。有些人有很多IP地址,而有些人只共享一个IP地址。

一个完全可靠的方法将是棘手的。你的两个想法都有问题——cookie可以被禁用,一个用户可能有多个IP和/或许多用户可能共享相同的IP。强迫你的用户注册,并且每个注册账户只允许一次投票,这样会更好,但有人可能会注册多个账户。强制每个帐户唯一的电子邮件验证在一定程度上减少了这一点,但你仍然可以通过注册多个不同的电子邮件来绕过它。

基本上,你采取的每一项措施都使绕过投票变得更加困难,但也首先增加了投票的努力。如果没有将选票与可以验证的已知唯一信息(社会安全号码、护照号码)联系起来,那么你采取的任何措施都可以被规避,这取决于你付出了多少努力。除了其他措施外,人工审查可疑的选票也有助于减少欺诈性投票。在易用性和安全性之间划一条线的位置取决于您需要在多大程度上强制执行一票限制。

正如Mark Byers所说,一些国家可能有动态IP地址(例如越南),因此每次用户建立连接(或重置调制解调器)时,IP地址都会不断变化。但是如果你能确保你的系统建立在一个IP地址是静态的国家,那就没问题了。

cookie解决方案似乎有点不安全,但如果您的大多数用户是非技术人员,那么他们将无法识别这个技巧(这是删除cookie并再次投票)。对我来说,只要我知道我的用户对这种技术一无所知,我就不喜欢这种方式。

我建议你用email verification进行民意调查,这样结果会更准确。用户可能只有几个电子邮件地址,他们不想仅仅为了投票而创建新的电子邮件地址。

无论您决定使用什么,IP地址都不会是安全的。用户基本上可以从不同的位置访问并再次投票等。Cookie是一个解决方案,但没有优化,因为删除的可能性(所以u风险用户识别过程)。您将需要处理来自用户的更多数据,以便能够安全地记录他们的选择。

如果系统是一个大系统的子系统,也许您可以使用一个大系统中常见的字段来标识当前系统中的用户。

希望这有帮助,

确保用户只投票一次的唯一方法是创建用户帐户因为:

cookie可以被擦除

IP地址是要改变的。(另外,多个用户可以有一个IP地址)

使用IP和投票在数据库中存储个人投票。这会造成臃肿,但确保每个用户都有一票。

很好,但比第二名慢,但我仍然推荐这个

在用户端存储一个cookie来检查他们是否投票。这是最简单的,但显然用户可以禁用cookie。

你是对的,这是不安全的,但更快,但我不喜欢这个