我正在开发一个简单的 Spring Boot RESTful API 用于轮询管理。简而言之,可以创建公共民意调查,其他“用户”可以投票。现在我必须确保每个客户每次投票只投票一次。因为我想防止使用常见的身份验证机制,例如HTTP Basic或JWT,所以我考虑通过客户端 IP 地址进行授权。意味着我在数据库中存储如下实体:public class Vote { private Long pollId; private Long choiceId; private String ipAddress; ...}使用类似的方法,我可以避免身份验证和帐户管理的需要。这是正确的方法还是有更好的方法来确保每个客户只投票一次?另外如何应对IP欺骗?希望有什么建议。
1 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
这是正确的方法还是有更好的方法来确保每个客户只投票一次?
并不真地。每台计算机都有唯一的 IP 地址的想法只部分正确。
事实上,人们拥有不止一种设备(例如电话、工作时的计算机、家里的计算机)。每台设备都可以连接到不同的网络,每个设备都有唯一的 IP。此外,IP 地址变化也相当频繁。断开家庭调制解调器/路由器的连接几分钟,重新连接时您可能会获得新的 IP 地址。这样就可以更改他的家庭IP并重新投票。此外,许多(如果不是大多数)客户端位于NAT设备后面,这意味着它们的 IP 与许多其他用户共享。根据您提出的方案,一旦与您位于同一 NAT 的人投票,其他人就无法投票。最后,用户可以轻松地使用 VPN、TOR 和各种其他技术,基本上可以根据需要多次投票。
另外如何应对IP欺骗?
如果使用 TCP,IP 地址欺骗就不是一件小事了。然而,获取与当前 IP 地址不同的实际 IP 地址非常容易(VPN、TOR 等),而且对此您无能为力。
添加回答
举报
0/150
提交
取消