Как ограничить доступ к веб-приложению только на одну машину?

Мне нужно убедиться, что каждый пользователь, получающий доступ к моему веб-приложению, может сделать это только с одной машины, поэтому 100 пользователей будут иметь в виду 100 машин. Что было бы лучшим решением? Является ли обнаружение и сохранение IP-адресов при первой регистрации? Я думаю, что IP может измениться даже в течение жизни сессии, так? Я также думал о сохранении файла cookie при первом входе пользователя в систему. Затем назначая эти файлы cookie пользователю, так же как и с паролем и именем пользователя, и каждый раз, когда вы обращаетесь к приложению, проверяющему наличие этого файла cookie.

Пожалуйста, дайте мне знать, что, на ваш взгляд, было бы лучшим решением. Мое бэкэнд – это php / mysql, если это имеет значение.

EDIT: Мне нужно уточнить … Это в дополнение к нормальному управлению сеансами. Мне нужно ограничить пользователей возможностью входа в веб-приложение только с одной конкретной машины. Поэтому, если пользователь изначально вошел в систему со своего компьютера на работе, и я сохранил его ip / cookie / etc., Тогда клиент выйдет из системы (или даже нет), отправится домой и пытается войти в систему, это не удастся. Я согласен с его ужасной идеей, но клиент настаивает 🙂

Solutions Collecting From Web of "Как ограничить доступ к веб-приложению только на одну машину?"

IP-адрес может измениться в случае мобильных клиентов или клиентов, которые переключаются между проводными и беспроводными сетями. Лучше всего, вероятно, будет предоставлять произвольно сгенерированный UID каждому клиенту при первом подключении (если он еще не имеет cookie). Затем вы можете проверить, что одно и то же имя пользователя не подключается с использованием двух разных UID.

Фокус в том, что вам нужно убедиться, что время UID вышло, так что если пользователь перейдет на другой компьютер, они не заблокированы. Возможно, одно изменение в UID в порядке, но они не могут вернуться к UID, который уже используется?

Вы можете ограничить один пользовательский агент, выставив клиента с SSL-сертификатом на стороне клиента, созданным с помощью элемента keygen, это заставит браузер создать пару ключей, сохраняя закрытый ключ в пользовательском агенте, а затем вы получите SPKAC, который вы может использовать для openssl создать сертификат, который затем отправляется обратно пользовательскому агенту, он устанавливает его, и он может использоваться для идентификации пользователя в этом конкретном браузере только через HTTP + TLS с этого момента.

Все остальное просто не будет работать на 100% – хотя вы можете взломать способы работы (пока что-то пойдет не так, и это не сработает) 🙂

К сожалению, IP не зависит от машины по нескольким причинам:

  1. IP-адрес может измениться во время сеанса, без уведомления (пользователь может даже не знать об этом)
  2. У большинства пользователей есть динамический IP-адрес, поэтому он определенно изменится в какой-то момент
  3. Для таких компьютеров, как ноутбук, планшет или мобильный телефон, IP-адрес основан на текущем поставщике услуг
  4. Все пользователи за прокси представят вам как один IP-адрес, поэтому вы все равно не сможете определить, переместились ли они с одной машины на другую

Вместо этого генерируйте какой-то уникальный ключ для сеанса и отслеживайте его в сочетании с именем пользователя. Запретить вход в систему, если одно и то же имя пользователя уже находится в другом активном сеансе. (Вы также захотите, чтобы какой-то способ автоматически очистить их, на всякий случай, если вы потеряете событие конца сеанса.)

Лучшее решение уже встроено в веб-сервер в зависимости от того, какой из них вы используете. Для этого нужны сессии . В ASP.NET/IIS, как правило, время ожидания сеанса составляет 20 минут.

Поэтому, если пользователь использует другой компьютер для доступа к вашему веб-приложению, тайм-аут сеанса освободит соединение с неработающим компьютером.

ОБНОВИТЬ

Возможно, вы захотите ограничить пользователя MAC-адресом своих машин, которые являются уникальными.

Если это очень внутреннее приложение, которое будет использоваться только внутри компании, возможно, будет возможно определить диапазон IP, поскольку более мелкие компании, которые не работают по всему миру, вероятно, будут иметь определенное количество IP-адресов от своего поставщика интернет-доступа.

Вы также можете подумать об использовании некоторой информации из $ _SERVER, чтобы ограничить пользователей комбинацией одного веб-браузера (HTTP_USER_AGENT) и одного порта (REMOTE_PORT) – в качестве дополнительного способа дифференцирования машин.

Но все эти решения плохие или худшие, технически, вероятно, невозможно решить эту проблему (если у вас не будет гарантий от вашего клиента, что все машины будут хранить статический IP-адрес, в этом случае это тривиальная, если не проблема).

Не делай этого. Многие люди будут получать доступ к вашему сайту с нескольких компьютеров, и они будут жаловаться, если вы их заблокируете.