基于IP地址的授权
IP address based authorization
我正在开发用于轮询管理的简单 Spring 启动 RESTful API。简而言之,可以创建 public 个民意调查,其他 "users" 个可以投票。
现在我必须确保每个客户每次投票只投票一次。因为我想避免使用 HTTP Basic
或 JWT
等常见的身份验证机制,所以我考虑通过客户端 IP 地址进行授权。意味着我在数据库中存储如下实体:
public class Vote {
private Long pollId;
private Long choiceId;
private String ipAddress;
...
}
使用类似这样的方法,我避免了身份验证和帐户管理的需要。
这是正确的方法还是有更好的方法来确保每个客户只投票一次?另外如何应对IP欺骗?希望大家推荐。
Is this the right approach or are there better ones to ensure each
client votes just once?
不是真的。每台计算机都有唯一 IP 地址的想法只部分正确。
实际上,人们拥有不止一台设备(例如 phone、工作电脑、家里的电脑)。每个设备都可以连接到不同的网络,每个设备都有一个唯一的 IP。此外,IP 地址更改非常频繁。断开您家 modem/router 的连接几分钟,当它重新连接时您可能会获得一个新的 IP 地址。因此可以更改他的家庭 IP 并再次投票。此外,许多(如果不是大多数)客户端都在 NAT 设备后面,这意味着他们的 IP 与许多其他用户共享。根据您提出的方案,一旦有人在与您相同的 NAT 后面投票,其他人就无法投票。
最后,用户可以轻松地使用 VPN、TOR 和各种其他技术基本上可以根据需要多次投票。
Also how to deal with IP spoofing?
如果使用 TCP,IP 地址欺骗并非易事。然而,获得一个不同于您当前 IP 地址的实际 IP 地址(VPN、TOR 等)非常容易,您对此无能为力。
我正在开发用于轮询管理的简单 Spring 启动 RESTful API。简而言之,可以创建 public 个民意调查,其他 "users" 个可以投票。
现在我必须确保每个客户每次投票只投票一次。因为我想避免使用 HTTP Basic
或 JWT
等常见的身份验证机制,所以我考虑通过客户端 IP 地址进行授权。意味着我在数据库中存储如下实体:
public class Vote {
private Long pollId;
private Long choiceId;
private String ipAddress;
...
}
使用类似这样的方法,我避免了身份验证和帐户管理的需要。
这是正确的方法还是有更好的方法来确保每个客户只投票一次?另外如何应对IP欺骗?希望大家推荐。
Is this the right approach or are there better ones to ensure each client votes just once?
不是真的。每台计算机都有唯一 IP 地址的想法只部分正确。
实际上,人们拥有不止一台设备(例如 phone、工作电脑、家里的电脑)。每个设备都可以连接到不同的网络,每个设备都有一个唯一的 IP。此外,IP 地址更改非常频繁。断开您家 modem/router 的连接几分钟,当它重新连接时您可能会获得一个新的 IP 地址。因此可以更改他的家庭 IP 并再次投票。此外,许多(如果不是大多数)客户端都在 NAT 设备后面,这意味着他们的 IP 与许多其他用户共享。根据您提出的方案,一旦有人在与您相同的 NAT 后面投票,其他人就无法投票。 最后,用户可以轻松地使用 VPN、TOR 和各种其他技术基本上可以根据需要多次投票。
Also how to deal with IP spoofing?
如果使用 TCP,IP 地址欺骗并非易事。然而,获得一个不同于您当前 IP 地址的实际 IP 地址(VPN、TOR 等)非常容易,您对此无能为力。