6

如果我在我的网站上有一个投票,我不想要求注册投票,但我只希望每次访问一个,我该怎么做?

假设来自 IP 123.34.243.57 的访问者访问该站点并投票。那么禁止来自 123.34.243.* 的任何人投票是否安全?这是一个好策略吗?

另一个是什么?

4

5 回答 5

6

这对 Internet 上的所有投票站点来说都是一个根本性的挑战,而您只是打破了问题的表面。

正如您所说的那样,您“只想允许每次访问一次 [投票]”表示您希望允许他们在每次打开浏览器并访问该站点时投票一次。我不认为这真的是你想要的。

我怀疑您想要的是给定的个人Person只能投票一次(可能是每次调查)。

问题是,一旦你正确地提出了问题,问题就会变得更加清晰。您不是在尝试识别 Internet 节点(IP 地址)、访问(会话 cookie)、浏览器实例(持久 cookie)或计算机(也很难识别)。

您可以使用 Cookie 技术,它们适合典型用户。颠覆这种技术很容易 - 清除浏览器中的 cookie, - 禁止浏览器中的 cookie, - 打开另一个浏览器, - 走到另一台计算机, - 使用匿名器, - ... 无穷无尽的其他方式。

您可以通过电子邮件地址进行验证,但您表示您不想进行注册,所以我认为这也不能解决您的问题。

如果您确实需要识别投票系统的唯一用户,您将需要有一些权限来保证任何给定用户的身份,或者只允许从受信任的平台访问该软件。

第一种技术需要注册(并且通常是昂贵且耗时的注册),以验证个人的实际合法姓名和位置。然后,使用公钥基础设施(又名数字证书),您可以根据他提供的凭据识别个人。

第二种技术需要一个受信任的平台,它依赖于遵循某些预定行为的硬件。例如,您可以创建一个通过 Xbox 360 或 iPhone 运行的投票站点。您将创建一个安装到这些设备之一的应用程序。根据平台的保护方式,您可以使用唯一性特征,例如 XBox 360 上的硬件地址或 Live ID 或 iPhone 上的硬件地址或电话号码,以普遍保证用户是同一个人以前去过。因为您可以控制应用程序而用户却没有,由于受信任平台的性质,您有合理的保证大多数用户将无法破坏应用程序的意图。

我怀疑这是一种说你可以做到的冗长的方式,但这远不是一个容易解决的问题。

考虑一下政治选举以及使这些选举公平和匿名需要多少资源和精力,这仍然是一个非常具有挑战性的问题。

于 2009-08-29T20:53:25.077 回答
2

为此使用公共 IP 可能是个坏主意。如果您使用这种方法,来自同一公司 LAN 的唯一访问者看起来都像一个用户。

也许是饼干?我相信这是大多数网站使用的。

结合某种自动或手动监控(例如日志文件分析)。对指示脚本的流量模式持怀疑态度。

于 2009-08-29T20:01:01.220 回答
1

不,您不能使用 IP 地址或 IP 范围来识别唯一用户。有几个原因:

  1. 停止整个跨度将停止未投票的用户。
  2. 动态获取 IP 地址的人稍后将获得不同的 IP 地址。
  3. 本地网络中的人(如大公司)共享相同的公共 IP 地址。

您可以使用 cookie 来标记已投票的人。这会好很多,因为它不会盲目点击,但它当然不完全准确,因为人们可以清除 cookie 并使用多个浏览器进行浏览。

要对用户进行完全准确的识别,以便您真正确定没有人多次投票,您需要为用户登录。好吧,除了人们当然可以创建多个帐户这一事实之外……

于 2009-08-29T20:07:31.627 回答
0

阻止 ip 范围不是一个好策略,您可以有 2 个选项来识别已经投票的用户、他们的 IP 和 cookie。在他们投票后,设置一个 cookie 并且不允许他们再次投票。

他们可以清除cookie和更改IP,但是可以接受匿名投票,如果您想要更好的策略,让他们注册投票

于 2009-08-29T20:03:14.943 回答
0

您应该只阻止该特定 IP,而不是整个 IP 范围!

如果您没有注册,这是最好的解决方案,但不适用于用户!

您可以阻止某人多次投票。但您也可能会阻止其他一些用户投票,这是因为 NAT。

网络地址转换(或 NAT)允许多个用户使用单个 IP 访问 Internet。

但这没关系,因为 NAT 没有被大量使用,并且很少有用户会被禁止投票。

然而,cookies 并不是好的解决方案。因为用户可以轻松清除浏览器 cookie 并再次投票。更糟糕的是,他/她可以编写脚本进行多次自动投票!

于 2009-08-29T20:06:56.043 回答