Управление сессиями пользователей в asp.net - PullRequest
0 голосов
/ 30 марта 2009

Мой клиент прошел аудит системы безопасности, которую я построил для него.

Они хотят, чтобы он работал таким образом, что если пользователь входит в систему через Internet Explorer, то при входе в систему через Firefox на той же машине (или через IE на другой машине) он убивает первый сеанс.

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

Существуют ли какие-либо встроенные механизмы для этого с помощью .NET Framework или кто-то может указать мне направление некоторых учебников и т. Д.

Большое спасибо,

Ed

Ответы [ 2 ]

2 голосов
/ 30 марта 2009

Сначала добавьте поле в таблицу пользователей для хранения текущего идентификатора сеанса. Этот идентификатор легко доступен из вашего кода. Когда пользователь входит в систему, сохраните этот идентификатор.

При каждом запросе страницы проверяйте, соответствует ли текущий идентификатор сеанса тому, что было сохранено в вашей пользовательской таблице. Если он не совпадает, очистите данные текущего сеанса и верните пользователя обратно на экран входа.

Это не помешает пользователю использовать несколько вкладок в IE 7, потому что IE7 использует один и тот же экземпляр для каждой вкладки; но это остановит их от использования нескольких экземпляров браузера.

Причина, по которой это будет работать, заключается в том, что каждый браузер содержит свое собственное пространство для файлов cookie. Сеансы сопоставляются на стороне сервера на основе значения cookie, которое хранит идентификатор сеанса и отправляется обратно на сервер при каждом запросе.

Кстати, это не очень эффективный способ устранения перехвата сеанса; что это звучит как аудит безопасности пытается предотвратить. Если вам нужно сделать это, обновите свой вопрос, и я пойду дальше.

UPDATE

Один из способов остановить перехват сеанса - сохранить случайное число в сеансе и в виде файла cookie в браузере. Когда поступит следующий запрос, убедитесь, что значения cookie и сеанса совпадают. Если они этого не делают, то сбросьте переменную идентификатора сеанса в вашей пользовательской таблице. Это заставит все сеансы войти снова. Для каждого запроса страницы (post / get) создайте новое случайное значение. Недостатком является то, что страницы не могут быть добавлены в закладки; но это, вероятно, приемлемо.

0 голосов
/ 30 марта 2009

Я написал о том, как я справляюсь с этим. По сути, идея заключается в том, что мы создаем непостоянный файл cookie с Guid.

Затем мы храним это привязанное к userId в каком-то месте на сервере (App Cache, DB и т. Д.). Затем у нас есть опросник, который подключается к серверу каждые пару минут, и если файл cookie не соответствует значению, мы выходим из системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...