我只写了一些小的php网络应用程序,我现在正在把代码放在一起,以允许用户提交短篇小说。这些故事将显示并允许其他人投票。获胜者会得到一些相当有价值的东西,我是偏执狂的人会试图操纵它。
Debian / Apache / PHP 5.2 / jquery
用户无需登录/验证。
用户可以投票多个故事,但每个故事只能投票一次
是否像使用IP地址标记每个故事并且不计算来自该IP的其他提交一样简单?谢谢你的任何建议。
答案 0 :(得分:9)
不,这不是那么简单。欺骗IP地址相当容易,人们可以从几个地方投票。此外,很可能使用相同的IP地址连接不同的人/计算机。不同的人甚至(高度)尝试使用同一台计算机(和浏览器)进行投票。
即使是登录系统也不防水:你根本无法验证人的身份。用户可以输入不同的电子邮件地址和虚假数据,如姓名和出生日期。
另一方面,如果您想要在给定计算机上对给定浏览器进行唯一标识(与唯一用户相反),请查看Panopticlick并阅读{{3 }}
除此之外,你仍然可以(尝试)使用cookie来识别投票的浏览器。
答案 1 :(得分:5)
您可以将用户个人资料数据库放在一起。因此,您绘制某些用户信息,如IP,浏览器,位置,操作系统版本等。然后创建标准匹配或加权匹配系统,如果他们“太可疑”,就会清除人们。是的,你仍然会在这里和那里得到误报,但是如果你像你说的那样偏执,那么你可能最好在验证时进行一些 overboard 。为了获得更好的结果,请始终返回“成功”消息,以便他们认为他们正在游戏系统,而不是试图找到打败它的方法。
答案 2 :(得分:3)
如果您决定不实施登录/密码界面,则应使用双重验证系统。没有什么是完美的,但有了常识,我相信你可以建立一些好的东西。
从Cookie开始。只需使用story_id,datetime和定义的到期时间等数据保存一些cookie。这样一来,如果那台机器已经投票,它将无法在一段时间内再次投票,比方说24小时。
拥有一个数据库表,其中列出了为不同故事投票的所有IP。因此,当有人投票时,只需检查该IP是否在该特定故事的列表中。该表还应该有一个额外的列来保存从该IP执行的尝试次数。如果IP在列表中,并且cookie未设置,那么某人已经使用该IP投票,可能的情况是:
在任何正常情况下,对于同一个故事,IP很少会尝试投票超过20次。你应该设置一个阈值“家庭多次相同的IP可以投票”。因此,如果没有cookie,并且IP投票的次数超过了您的阈值,那么您就知道出现了问题,并且您给该IP更长的等待时间,甚至可能将其完全阻止投票过程。
使用验证码。不要让投票太容易,但也不要太难。即使使用前面提到的验证系统的方法,您也可以使用验证码强制用户在单击“提交”之前思考/编写内容。你可以使用像重新上尉(http://recaptcha.net/)那样烦人的东西,或像m-captcha(http://code.google.com/p/m-captcha)/这样友好的外观。这样,黑客就会在试图覆盖你的安全措施时遇到痛苦。
答案 3 :(得分:2)
独特识别选民
如果您从上面通过IP验证,请不要担心用户代理。这是多余的。
如果您遵循所有三项指导原则,您也可以实时更新投票,因为您不能取消任何通过上述标准的投票。如果他们不能投票,你可能甚至不应该出示投票按钮,除非你要让人们改变他们的投票,这也是一个好主意,如果有迟到的参赛作品。
如果我投票,我希望能够在我阅读后立即投票,然后如果我发现了一个我更喜欢的故事,我希望能够改变我的投票。
投票系统
现在,关于投票,你可能想要在计算任何投票之前要求来自同一“人”的至少三个不同短篇小说的投票。你将有更好的机会让最受欢迎的故事最终成为胜利者。
例如,如果我发送链接给我的所有朋友投票给我的故事,他们还必须选择其他一些故事,可能是更好的故事。最糟糕的电影有可能最终赢得胜利,因为人们可能投票选出最差的两个和他们自己的投票,但是,在实践中,我从未见过这种情况。这是基于7年的电影节,都使用这个系统。
此外,对于互联网竞赛,每个人在页面顶部获得相同的时间绝对至关重要,因此您应该找出一些方法来轮换或至少随机化这些条目。
总是在比赛规则中加入一些关于评委们得出最终结论的内容。
答案 4 :(得分:1)
不,IP地址不是一个好的标识符。有人从例如浏览手机可能永远不会拥有相同的IP地址(甚至家庭用户也可以定期更改其IP地址)。
另一方面,从同一个房屋/办公室/代理服务器浏览的多人将被您的方法阻止
答案 5 :(得分:1)
使用php,您可以获得其浏览器的IP地址和用户代理
IP:$_SERVER['REMOTE_ADDR']
用户代理:$_SERVER['HTTP_USER_AGENT']
您可以通过使用登录系统并存储此人使用Cookie投票的内容来加强这一点。但即便如此,它仍然不完美。
答案 6 :(得分:0)
最好的办法是尝试将信息存储在两个地方:
将这两种方法结合在一起应该可以让你知道谁投了票,什么,不让某人第二次投票。当然,如果他们去多台机器,删除cookie,和/或更改他们的IP,你就无法阻止它。
答案 7 :(得分:0)
以下是我过去所做的事情:
如果是匿名投票,那么抓住所有诈骗者是不可能的。