Как предотвратить множественную аутентификацию в веб-приложении / сайте?
Есть сайт с областью зарегистрированных пользователей, у всех есть свой пользователь / пароль.
Проблема в том, что некоторые из них пытаются поделиться информацией об аутентификации с другими, чтобы помочь им завершить свою работу.
Там нет возможности ограничить по IP-адресу, потому что есть динамический IP-адрес предоставляется для всех.
Что может быть лучшим решением? хранить сеансы в базе данных? как восстановить, если они не выходят из системы должным образом?
Спасибо
5 ответов
Я обычно позволяю им пинг-понг: пользовательский session_save_handler, который сохраняет сеанс в базе данных, с дополнительным полем для идентификатора пользователя (session_id char, session_data blob, session_user int or char
). Успешная попытка входа в систему уничтожает / удаляет все другие сеансы с этим конкретным идентификатором пользователя, и вы даже можете зарегистрировать количество раз, когда это DELETE
оператор фактически удаляет строки, где счетчик где-то блокирует людей, явно чрезмерно "удаляющих" сеансы. Люди, переключающие компьютеры / местоположения / браузеры, по-прежнему могут выполнять работу сразу после входа в систему, пользователи, разделяющие аутентификацию, будут продолжать регистрировать друг друга и увеличивать свой счетчик до тех пор, пока вы не сочтете необходимым произвольное ограничение, в этом случае вы можете отключить / заблокировать учетную запись.,
Если некоторые люди делятся своим ilogin/ паролем, то вы мало что можете сделать.
Вы можете обнаружить, что кто-то подключен из двух разных мест, а затем закрыть оба сеанса, но это не решит полную проблему.
Там нет особо эффективного способа. Тем не менее, одним из методов также может быть использование БД для хранения последнего IP-адреса, использованного для входа в учетную запись, проверка связи с БД каждые X раз, и, если IP-адрес клиента не совпадает с последним IP-адресом, использованным для входа, завершите сеанс...
Вы также можете отслеживать IP-адреса, используемые для доступа к учетной записи, и ограничить каждого пользователя, скажем, три. Если они хотят другого (как это может законно произойти), или если они превышают эту сумму - с вами нужно связаться / одобрить. Это пассивный метод, но он будет уведомлять вас о возможном совместном использовании аккаунта.
Я согласен с Loïc Février, что вы мало что можете сделать, когда они делятся логинами.
Если вы действительно хотите ограничить доступ пользователей из нескольких мест, при обнаружении 2 сеансов одного и того же пользователя вы можете отправить какой-либо код / пароль через электронную почту, и только реальный владелец учетной записи сможет продолжить.
Бизнес решение
Сделайте рекомендации, чтобы никто не мог делиться логинами. Отслеживайте все операции входа в систему и, если вы видите одновременный доступ, заблокируйте пользователя.
а) Заблокированный пользователь позвонит вам, и его логин не сработает: дайте второй и последний шанс. Если не принято -> скажи боссу. Если ты начальник -> огонь.
б) заблокированный пользователь не будет вам звонить. Интересно, как он мог работать сейчас? -> скажи боссу. Если ты начальник -> огонь.
Решение для программирования
На экране входа в систему установите флажок (IP-адрес?) В базе данных, в которую пользователь вошел в данный момент. При выходе сбросьте флаг. Если пользователь вошел в систему, не разрешайте вход. Если пользователь не выйдет правильно, флаг все равно будет установлен. Так что определите время ожидания для флага. Около 5 минут должно быть в порядке. Никому не будет выгодно делиться входом в систему, так как он всегда будет входить снова, когда вы проверяете доступ к каждой странице.