【问题标题】:How can I track IPv4 addresses to prevent multivoting?如何跟踪 IPv4 地址以防止多选?
【发布时间】:2019-07-14 18:17:36
【问题描述】:

我正在创建一个网站,并且正在尝试实现一项功能来防止多票投票。我目前实现它的方式似乎在一定程度上可行,但似乎用户 IPv6 IP 地址每天都在变化,允许每个用户在另一天进行另一次投票。

这是我目前记录 IP 的方式。

这就是我在 PHP 中获取用户 IP 的方式:

$user_ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');

以下是我在数据库中记录每次投票的方式:

$check_if_vote = mysqli_query($con, "SELECT * FROM voting_log WHERE voter_ip = '".$user_ip."' AND voted_user = '".$search."'");

if(mysqli_num_rows($check_if_voted) <= 0) {
    mysqli_query($con, "INSERT INTO voting_log (voter_ip, voted_user, votetype) VALUES ('".$user_ip."', '".$search."', 0);");
} else {
   echo "You have already voted for this user";
}

有没有办法只跟踪 IPv4 IP,因为这些似乎永远不会改变?

【问题讨论】:

  • IPv6 可以将sometimes 映射回 IPv4 地址,但是您将如何捕获同一路由器后面的多个不同用户(= 相同的 IPv4 地址)?或者,就此而言,同一用户使用两台设备(家用电脑和办公室电脑)?
  • 在我的网站的独特情况下,这不是问题。对于我的网站而言,每个家庭投一票是合理的。
  • 啊,好的。您的网站无法控制访问者的计算机是向您的网站发送 IPv6 还是 IPv4 地址。如果要使用 IP 地址,最好的办法是尝试将 IPv6 映射回 IPv4。如果不可能的话,也许假设一个“已经投票”的状态?
  • IP !=人,一个IP多人,一个人多个IP。这种方法永远行不通。至于IP转换,IPV6地址不能多于4个。
  • 让用户在投票前注册并确认邮箱地址。否则,即使是最少量的技术知识,任何人都可以随心所欲地投票。

标签: php html ip environment-variables


【解决方案1】:

如果您愿意在其中添加一些 javascript,请考虑在您的网站前端添加一些代码来识别客户端。将其与请求一起发送,如果您正在处理 IPv6,请改用指纹。

This question 有多个很好的答案,详细介绍了如何实现这一目标。

这仍然不是万无一失的,但是遇到既拥有 IPv6 又足够精明地绕过您在客户端选择的唯一标识方法的用户的机会可能低到足以在您的情况下接受。

【讨论】:

  • 感谢您的回复,这很有帮助。为我的无知道歉,因为我还没有深入阅读它。每次用户添加插件或其他东西时,每个用户的指纹不会改变,因此要求您将他们的指纹与他们的 IPv6 IP 地址一起存储,这会导致我们遇到同样的问题。也许有一个公式可以比较每个记录指纹的相似性,如果足够相似,它就会被归类为该指纹?
  • 我认为你的假设是正确的。据我所知,没有万无一失的方法来对用户客户端进行指纹识别。我只是尽可能地努力劝阻用户不要努力。我很好奇,你们投票系统的用例是什么?
  • 允许用户投票决定是否推荐其他用户。它基于视频游戏。
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 2011-06-26
  • 2014-12-29
  • 2012-12-25
  • 1970-01-01
  • 2012-07-01
  • 2015-07-05
  • 2019-10-08
相关资源
最近更新 更多