我正在开发一个调查网站,任何人都可以投票一次。显然,我必须阻止调查的多个注册保持相关性。我强迫每个用户使用他们的Google,Facebook或Twitter帐户登录。但是,如果他们在每个帐户上都有帐户,他们可以进行3次身份验证,或者在同一平台上使用多个帐户进行身份验证(我在Google上有3个帐户)。所以我想存储他们的IP地址,但他们仍然可以使用代理。我可以将HTTP用户代理保留为PHP's get_browser(),尽管他们仍然可以更改浏览器。我可以用正则表达式提取操作系统,改变操作系统比浏览器更容易。还有地理位置,例如the Google Map API。
答案 0 :(得分:4)
绝对确定的唯一方法是使用唯一标识人的内容,例如序列号(社会保险号)或硬件标识符(RSA密钥)。接下来最好的事情是需要一张信用卡,因为它通常会识别名字和姓氏。所有其他尝试都可以轻松破解(即使用电话号码,地理定位等进行2阶段认证)。发送的标题可以轻松欺骗浏览器(地理定位,IP地址,用户代理都是标题),正如您所提到的,创建多个Google / Twitter帐户非常容易。
答案 1 :(得分:3)
您可以通过手机验证用户,通过发送带有一些代码的短信。这将把票数限制为用户拥有的手机号码数。
答案 2 :(得分:1)
您提到的那些测试可以帮助阻止某些用户多次注册,但如果用户确实需要,他们将能够规避这些措施。
他们可以使用Google,FB或Twitter创建多个帐户,使用浏览器插件轻松欺骗他们的用户代理,正如您所说,隐藏在大量代理中,这也会破坏地理定位。
您可以做的另一件事是添加代理检测,如果您认为他们在代理服务器后面,请尝试阻止注册/投票。
答案 3 :(得分:1)
如果要求域名(或TLD,例如.gov?)的有效电子邮件地址,每个物理人员只能授予一个电子邮件地址?
在这里提出建议,如果你必须允许任何人投票,这可能是不可行的。
答案 4 :(得分:1)
很可能你必须做出妥协。 100%确定您的用户是不同的人几乎是不可能的。一种合理的方法是使用Twilio之类的服务,并要求您的用户提供一个唯一的电话号码,您的网站可以通过简单的电话确认。
您可能还想让不方便使用多个帐户。在您的情况下,您可以在投票过程中使用验证码,以便自动系统无法输入投票。这样,即使有人拥有10或50个电话号码,他们也必须付出巨大努力来有意义地改变你的结果。
答案 5 :(得分:1)
首先,你需要以某种方式唯一地识别用户。你提到的一些事情是:
以上所有内容都很容易被欺骗:
唯一标识用户的是SSN。问题是由于网上有几个发电机,它可以轻易地伪造。
问题在于,确定一个人真的是他或她声称的那个人真的很难。解决方案是尽可能让用户尽可能多地进行多次投票(如果单票投票并不重要)。
这可以通过使用例如SMS验证来解决。用户通过几个电话号码来使用是很困难/不方便的。
答案 6 :(得分:1)
首先,我只允许在网站上注册一封电子邮件。
那么您应该考虑允许每个IP投票一次。这可能不太可行,因为它显然会阻止路由器背后的潜在选民。
您可以查看每位选民的用户代理,以尝试查找差异。
尽管您可能无法完全验证用户服务器端,但基本上应检查用户唯一的任何内容。
正如已经建议使用电话号码也是减少垃圾邮件选民的另一种方法。
答案 7 :(得分:-1)
要求用户登录帐户似乎是防止批量注册的常用方法。有一些公司提供这些服务。