如果我在我的网站上有一个投票,我不想要求注册投票,但我只希望每次访问一个,我该怎么做?
假设来自 IP 123.34.243.57 的访问者访问该站点并投票。那么禁止来自 123.34.243.* 的任何人投票是否安全?这是一个好策略吗?
另一个是什么?
如果我在我的网站上有一个投票,我不想要求注册投票,但我只希望每次访问一个,我该怎么做?
假设来自 IP 123.34.243.57 的访问者访问该站点并投票。那么禁止来自 123.34.243.* 的任何人投票是否安全?这是一个好策略吗?
另一个是什么?
这对 Internet 上的所有投票站点来说都是一个根本性的挑战,而您只是打破了问题的表面。
正如您所说的那样,您“只想允许每次访问一次 [投票]”表示您希望允许他们在每次打开浏览器并访问该站点时投票一次。我不认为这真的是你想要的。
我怀疑您想要的是给定的个人Person只能投票一次(可能是每次调查)。
问题是,一旦你正确地提出了问题,问题就会变得更加清晰。您不是在尝试识别 Internet 节点(IP 地址)、访问(会话 cookie)、浏览器实例(持久 cookie)或计算机(也很难识别)。
您可以使用 Cookie 技术,它们适合典型用户。颠覆这种技术很容易 - 清除浏览器中的 cookie, - 禁止浏览器中的 cookie, - 打开另一个浏览器, - 走到另一台计算机, - 使用匿名器, - ... 无穷无尽的其他方式。
您可以通过电子邮件地址进行验证,但您表示您不想进行注册,所以我认为这也不能解决您的问题。
如果您确实需要识别投票系统的唯一用户,您将需要有一些权限来保证任何给定用户的身份,或者只允许从受信任的平台访问该软件。
第一种技术需要注册(并且通常是昂贵且耗时的注册),以验证个人的实际合法姓名和位置。然后,使用公钥基础设施(又名数字证书),您可以根据他提供的凭据识别个人。
第二种技术需要一个受信任的平台,它依赖于遵循某些预定行为的硬件。例如,您可以创建一个通过 Xbox 360 或 iPhone 运行的投票站点。您将创建一个安装到这些设备之一的应用程序。根据平台的保护方式,您可以使用唯一性特征,例如 XBox 360 上的硬件地址或 Live ID 或 iPhone 上的硬件地址或电话号码,以普遍保证用户是同一个人以前去过。因为您可以控制应用程序而用户却没有,由于受信任平台的性质,您有合理的保证大多数用户将无法破坏应用程序的意图。
我怀疑这是一种说你可以做到的冗长的方式,但这远不是一个容易解决的问题。
考虑一下政治选举以及使这些选举公平和匿名需要多少资源和精力,这仍然是一个非常具有挑战性的问题。
为此使用公共 IP 可能是个坏主意。如果您使用这种方法,来自同一公司 LAN 的唯一访问者看起来都像一个用户。
也许是饼干?我相信这是大多数网站使用的。
结合某种自动或手动监控(例如日志文件分析)。对指示脚本的流量模式持怀疑态度。
不,您不能使用 IP 地址或 IP 范围来识别唯一用户。有几个原因:
您可以使用 cookie 来标记已投票的人。这会好很多,因为它不会盲目点击,但它当然不完全准确,因为人们可以清除 cookie 并使用多个浏览器进行浏览。
要对用户进行完全准确的识别,以便您真正确定没有人多次投票,您需要为用户登录。好吧,除了人们当然可以创建多个帐户这一事实之外……
阻止 ip 范围不是一个好策略,您可以有 2 个选项来识别已经投票的用户、他们的 IP 和 cookie。在他们投票后,设置一个 cookie 并且不允许他们再次投票。
他们可以清除cookie和更改IP,但是可以接受匿名投票,如果您想要更好的策略,让他们注册投票
您应该只阻止该特定 IP,而不是整个 IP 范围!
如果您没有注册,这是最好的解决方案,但不适用于用户!
您可以阻止某人多次投票。但您也可能会阻止其他一些用户投票,这是因为 NAT。
网络地址转换(或 NAT)允许多个用户使用单个 IP 访问 Internet。
但这没关系,因为 NAT 没有被大量使用,并且很少有用户会被禁止投票。
然而,cookies 并不是好的解决方案。因为用户可以轻松清除浏览器 cookie 并再次投票。更糟糕的是,他/她可以编写脚本进行多次自动投票!