2015-01-09 108 views
-1

所以我有一个网络应用程序将收集人们的意见(人们必须选择选项1或选项2)。我不希望任何人两次或更多次提交自己的意见,这让我想到一个观点是比较流行的,当它是不是,所以我认为的几种方式,但他们都有自己的缺点:防止设备多次执行操作

  • 检查用户的IP地址:用户可以通过使用网络代理或类似的东西轻松地更改他们的IP。像我做了其他桌面应用程序
  • 检查用户的HWID:看起来这是不可能用PHP

您能否给我建议的方式是最适合我的web应用程序的问题?理想的解决方案是每台设备只有一个投票,但我不知道如何使用PHP进行投票。

编辑:请给我你的意见:cookie工作与网络代理?如果应用程序存储了一个cookie,那么用户使用web代理打开网站或者只是使用隐私浏览,cookie是否仍然存在?如果是这样,IP地址和cookie之间的组合可能会起作用。

+2

IP地址也有相反的效果。如果有多人在NAT后面,只有一个人可以投票。 – 2015-01-09 18:57:04

+2

您可以使用cookie,但它们也是可编辑的 – Neat 2015-01-09 18:57:28

+4

您无法防止这种情况,但您可以让他们难以投票多次。也许要求他们先登录。大多数用户不会真的需要第二次注册他们的电子邮件。 – 2015-01-09 18:58:28

回答

3

为防止意外多次提交,需要登录并将投票保存在数据库中,或者创建一个与用户会话相关的随机唯一标识,并将该标识保存在投票中,拒绝其ID已存在的投票,或者在用户已经投票的会话中保存一个标志。

您可以使用ever/super-cookies来刻意伪造投票,但除非您有一些手段来验证身份并确保没有人可以拥有多个身份,否则您无法阻止它们。由政府颁发的具有电子商务和电子商务(无论),社会安全号码功能的身份证。但是,您必须与执行验证的机构进行交流。

永远/超级饼干和浏览器指纹识别容易受到多个浏览器的使用,并在面对偏执狂用户时中断。

如果要防止多次故意选票的安全性和可靠性较低,可以在StackExchange/StackOverflow(即基于信誉)上建立标识,并在获得某些信誉级别之前阻止投票。或者您可能需要基于电话/帐户/信用卡/付款的验证信心低(例如,发送包含验证码的短信到电话号码,Facebook,Google,Amazon,PayPal,Stripe ...) - 人们可以拥有多个电话,账户,信用卡/借记卡等。

最后,没有易于使用的身份验证系统,可以防止多重身份信心(我知道的)。

+0

谢谢你的回答。可悲的是,我真的需要一个易于使用的系统来完成我的工作。请给我你的建议:cookie是否可以与Web代理一起工作?如果应用程序存储了一个cookie,那么用户使用web代理打开网站或者只是使用隐私浏览,cookie是否仍然存在?如果是这样,IP地址和cookie之间的组合可能会起作用。 – user76757 2015-01-09 19:24:00

+0

常规Cookie应与网络代理一起使用,但在退出隐私浏览时将被删除(或根本不存储)。有可能使用一些超级曲奇来回避这个问题,例如浏览器中存在的[HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security)持久性机制 - 它保留在私密浏览会话中(但可能很快会被修复)。正如其他人所说的那样,依靠IP地址是不好的 - 它可能会在会话期间发生变化(当ISP断开连接时,或者从无线连接切换到3G时),并且可能会在多个用户之间共享。 – Archimedix 2015-01-09 19:33:43