Я искал устаревшее приложение с веб-интерфейсом пользователя. Учитывая его возраст (около 10 лет на некоторых частях), многое нуждается в обновлении и повторной архитектуре, но мне интересно узнать о том, как работают пользовательские сессии.Оценка: управление нечетным сеансом в веб-приложении
В двух словах:
- Весь интерфейс подается через HTTPS.
- Пользователи аутентифицируются незаметно, сравнивая хеш имени пользователя и пароля со значениями, сохраненными в базе данных.
- После аутентификации установлен куки-файл браузера, который содержит два значения, которые сохраняют последний раздел/модуль верхнего уровня и второго уровня, к которому пользователь имел доступ, дату истечения срока действия и значение, подобное «loggedin = true ». При выходе из системы cookie сбрасывается с «loggedin = false». В cookie нет токена сеанса.
- Первая страница загружается после аутентификации, а также каждая последующие загрузки страницы, содержит переменную JavaScript «sessionToken», который представляет собой в кодировке base64 строки с различными частями, некоторые из которых шифрованных:
var sessionToken = "...."
- Каждого звено навигации генерирует HTTP POST-запрос через элемент
<form>
и обработчики событий JavaScript с соответствующими переменными, переданными в него за кулисами, вместе с sessionToken, который, в свою очередь, устанавливается снова, идентично, при загрузке следующей страницы. Пользователь остается включенным, если в то же время cookie имеет «loggedin = true», и время истечения срока действия не прошло. - Сессии истекают после настраиваемого времени. Истечение срока действия происходит при следующем нажатии на элемент навигации по истечении срока действия. Я считаю, что это просто сравнивая последний раз, когда токен сеанса был записан в бэкэнд, но, возможно, используется файл cookie - я еще не нашел этого. Когда сеансы заканчиваются, значение «loggedin» в cookie перебрасывается, и пользователь перенаправляется на страницу входа в систему.
Я не специалист по безопасности и не видел этот дизайн раньше. Мне было бы интересно узнать, какие подводные камни и риски, если таковые имеются, вы можете увидеть в нем. (Я, у меня плохое чувство, но хотел бы получить более твердый ввод.)
Если это стандартный способ в каком-то уголке сети, я бы тоже хотел услышать об этом.
Большое спасибо. Управление ключами является самостоятельной проблемой, что сказывается на результатах за пределами сеансов входа в пользовательский интерфейс. То, о чем я в основном интересовался, - это последствия генерации JavaScript для установки токена сеанса, который, как я полагаю, можно было получить на стороне клиента непредвиденными способами. Я все еще обдумываю это. – chryss
У меня только что была мозговая волна, когда вы говорили о создании JavaScript для установки токена в документе на стороне клиента. По общему признанию, это плохая идея, учитывая, что это более чувствительный бит информации, который не может быть обеспечен никакой дополнительной безопасностью по сравнению с другими данными, отправляемыми по кабелю. Посмотрите обновленный ответ. –