我正在为我的PHP / MySQL网站创建一个投票系统,我想确保一个用户只能投票一次。这样做的好方法是什么?到目前为止,我已经考虑并半实施了以下内容:
使用IP和投票在数据库中存储个人投票。这会产生庞大的体积,但可确保每个用户获得一票。
在用户端存储Cookie以检查他们是否已投票。这是最简单的,但显然用户可以禁用cookie。
最实用的方法是什么?任何其他建议都非常受欢迎。
答案 0 :(得分:25)
无法实现的完美:(独特的政府编号)
关闭足够现实:(电子邮件/第三方认证)
好思想但虚假的假装(IP地址)
Crash-And-Burn (Cookies)
答案 1 :(得分:4)
如果您希望有机会审核系统,则应尽可能多地在数据库中存储信息。如果您记录很多,那么即使有投票欺诈,您也可以检测到它并取消这些投票。
第二种方法是完全不安全的。如果他们想再次投票,用户可以删除cookie,你将无法检测到这种情况发生了。
重要提示
人们在IP地址之间没有一对一的映射。有些人拥有许多IP地址,而其他人共享一个IP地址。
答案 2 :(得分:3)
完全可靠的方式将变得棘手。您的想法都存在问题 - 可以禁用cookie,并且一个用户可能拥有许多IP和/或许多用户可能共享相同的IP。强制您的用户注册并且每个注册帐户只允许一次投票会更好,但是有人可能会注册多个帐户。强制每个帐户进行唯一的电子邮件验证可以减少这种情况,但您仍然可以通过注册多个不同的电子邮件来解决此问题。
基本上,你采取的每一项措施都会让你更难以解决,但首先也会增加投票的努力。如果没有将选票与可以验证的已知特征(SSN,护照号码)捆绑在一起,那么您实施的任何措施都可以被规避,这取决于它的努力程度。除了其他措施之外,手动审查可疑的投票也有助于减少欺诈性投票。您在易用性和安全性之间划清界限取决于您需要多少执行一次投票限制。
答案 3 :(得分:2)
正如Mark Byers所说,一些国家/地区可能拥有动态IP地址(例如越南),因此每次用户建立连接(或重置调制解调器)时,IP地址都会不断变化。但是,如果你能确保你的系统是在一个IP地址是静态的国家建立的,那就没关系了。
Cookie解决方案似乎有点不安全,但如果您的大多数用户都是非技术人员,那么他们将无法识别这个技巧(即删除Cookie并再次投票)。对我来说,我不喜欢这种方式,只要我知道我的用户对此技术一无所知。
我建议您使用email verification
进行投票,以便结果更准确。用户可能只有几个电子邮件地址,他们不想创建新的电子邮件地址。
答案 4 :(得分:2)
无论您决定使用什么,IP地址根本不安全。用户基本上可以从不同的位置访问并再次投票等.Cookie是一种解决方案,但由于删除可能性而未进行优化(因此您冒着用户识别过程的风险)。您需要处理来自用户的更多数据才能安全地记录他们的选项。
如果系统是更大系统的子系统,也许你可以使用更大系统中常见的字段来识别当前系统中的用户。
希望这有帮助,
答案 5 :(得分:2)
确保用户只投票一次的唯一方法是创建用户帐户,因为:
可以删除Cookie
IP地址应该改变。 (此外,多个用户可以拥有一个IP地址)
答案 6 :(得分:1)
使用IP和投票在数据库中存储个人投票。这会产生庞大,但确保每个用户获得一票。
这很好,但比第二慢,但我还是推荐这个。
在用户端存储cookie以检查他们是否已投票。这是最简单的,但显然用户可以禁用cookie。
你是不对的但不是很快但我不喜欢这个