Авторизация на основе IP-адреса - PullRequest
0 голосов
/ 14 октября 2019

Я разрабатываю простой Spring Boot RESTful API для управления опросами. В нескольких словах, можно создавать публичные опросы, и другие «пользователи» могут голосовать за них.

Теперь я должен убедиться, что каждый клиент голосует только один раз за опрос. Поскольку я хочу предотвратить использование общих механизмов аутентификации, таких как HTTP Basic или JWT, я подумал об авторизации по IP-адресу клиентов. Средства, которые я храню в базе данных, например:

public class Vote {

    private Long pollId;
    private Long choiceId;
    private String ipAddress;

    ...
}

Используя такой подход, я исключаю необходимость аутентификации и управления учетными записями.

Это правильный подход илиесть ли лучшие, чтобы каждый клиент голосовал только один раз? Также как бороться с IP-спуфингом? Надеюсь на любые рекомендации.

1 Ответ

2 голосов
/ 14 октября 2019

Правильный ли это подход или есть ли лучшие, чтобы каждый клиент голосовал один раз?

Не совсем. Идея о том, что каждый компьютер имеет уникальный IP-адрес, верна лишь частично.

На самом деле люди имеют более одного устройства (например, телефон, компьютер на работе, компьютер дома). И каждое устройство может быть подключено к другой сети, с уникальным IP-адресом в каждом. Также IP-адреса меняются довольно часто. Отключите домашний модем / маршрутизатор на пару минут, и вы, вероятно, получите новый IP-адрес при повторном подключении. Так что можно сменить свой домашний IP и проголосовать снова. Более того, многие клиенты (если не большинство) находятся за устройствами NAT , что означает, что их IP-адрес используется многими другими пользователями. По предложенной вами схеме, когда кто-то за тем же NAT, что и вы, голосует, никто другой не может. Наконец, пользователи могут легко использовать VPN, TOR и различные другие методы, чтобы в основном голосовать столько раз, сколько они хотят.

Кроме того, как бороться со спуфингом IP?

IPподмена адреса не является тривиальной, если вы используете TCP. Однако получить реальный IP-адрес, отличный от текущего, довольно просто (VPN, TOR и т. Д.), И с этим мало что можно поделать.

...