防止在调查网站上进行多次注册

时间:2011-11-24 17:45:32

标签: php security user-registration

上下文

我正在开发一个调查网站,任何人都可以投票一次。显然,我必须阻止调查的多个注册保持相关性。我强迫每个用户使用他们的Google,Facebook或Twitter帐户登录。但是,如果他们在每个帐户上都有帐户,他们可以进行3次身份验证,或者在同一平台上使用多个帐户进行身份验证(我在Google上有3个帐户)。所以我想存储他们的IP地址,但他们仍然可以使用代理。我可以将HTTP用户代理保留为PHP's get_browser(),尽管他们仍然可以更改浏览器。我可以用正则表达式提取操作系统,改变操作系统比浏览器更容易。还有地理位置,例如the Google Map API

问题

  • 如何防止多次注册?可以做什么样的测试?
  • 如何嵌入这些测试?按什么顺序执行?
  • 您是否已部署此类解决方案?

8 个答案:

答案 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)

首先,你需要以某种方式唯一地识别用户。你提到的一些事情是:

  1. 电子邮件地址
  2. IP地址
  3. HTTP用户代理
  4. 以上所有内容都很容易被欺骗:

    1. 可以创建多个邮件帐户
    2. 代理。有人试图找出一个人是否在代理人后面,但你不会找到有可用的精英代理的用户。另一个问题是可能有多个用户共享一个IP。
    3. 可以更改用户代理信息
    4. 唯一标识用户的是SSN。问题是由于网上有几个发电机,它可以轻易地伪造。

      问题在于,确定一个人真的是他或她声称的那个人真的很难。解决方案是尽可能让用户尽可能多地进行多次投票(如果单票投票并不重要)。

      这可以通过使用例如SMS验证来解决。用户通过几个电话号码来使用是很困难/不方便的。

答案 6 :(得分:1)

首先,我只允许在网站上注册一封电子邮件。

那么您应该考虑允许每个IP投票一次。这可能不太可行,因为它显然会阻止路由器背后的潜在选民。

您可以查看每位选民的用户代理,以尝试查找差异。

尽管您可能无法完全验证用户服务器端,但基本上应检查用户唯一的任何内容。

正如已经建议使用电话号码也是减少垃圾邮件选民的另一种方法。

答案 7 :(得分:-1)

要求用户登录帐户似乎是防止批量注册的常用方法。有一些公司提供这些服务。