Вопрос или проблема
У меня есть приложение, которое в настоящее время хранит несколько свойств профиля пользователя в сессионном хранилище для использования приложением при необходимости. Мы не храним конфиденциальные данные, такие как имя пользователя, пароль или номер социального страхования в сессионном хранилище, но мы храним такие свойства, как филиал пользователя. И приложение использует информацию о филиале для загрузки определённых данных, исключая другие данные. Например, если филиал пользователя — “Нью-Йорк”, то мы загружаем данные, относящиеся к этому филиалу.
Чтобы уточнить, это внутреннее приложение — за VPN — поэтому только сотрудники будут использовать приложение. И мы позволяем им временно менять свой филиал в самом приложении, если, например, они находятся в филиале Нью-Йорк, но хотят видеть данные из Лос-Анджелеса.
Считается ли использование сессионного хранилища в таком виде разумной практикой, или такие данные всегда следует хранить в чем-то вроде хранилища JavaScript? У меня есть один коллега, который считает, что это определенно не должно находиться в сессионном хранилище, но я не уверен, что это так. Считается ли это серьезным минусом в таком случае? Или это можно считать разумным использованием сессионного хранилища?
Наверное, самой большой проблемой, которую я вижу в этом, является масштабируемость. Маловероятно, что язык веб-сервера, который вы используете, хранит переменные сессии в каком-либо оптимизированном хранилище данных. Поэтому, если вы планируете хранить всего лишь несколько коротких переменных для нескольких одновременных сессий, я бы сказал, что это отличный способ это сделать (я использовал это в некоторых своих приложениях). Что касается безопасности, то хранение переменных на серверной стороне предпочтительнее, чем на клиентской стороне.
С точки зрения безопасности это не вызывает беспокойства, на мой взгляд.
Данные, хранящиеся там, не являются конфиденциальными, и я понимаю, что если они будут изменены, это не позволит пользователю получить доступ к ограниченным данным, и они могут внести изменения в самом приложении. Если приложение проверяет это значение на серверной стороне, то проблемы с безопасностью нет. Сказанное выше, принципиальная идея защиты sessionStorage заключается в том, что к нему нужно относиться как к недоверенному. Это означает, что необходимо валидировать, кодировать, экранировать его перед использованием и не использовать для конфиденциальных данных.
Ответ или решение
Использование SessionStorage для хранения информации о пользователе: подробный анализ
Введение
Вопрос хранения пользовательских данных в веб-приложении актуален для многих разработчиков, особенно когда речь идет о выборе между клиентским и серверным хранилищем. В данном случае обсуждается использование sessionStorage
для хранения свойств профиля пользователя, таких как подразделение. Давайте подробно рассмотрим удобство и безопасность такого подхода, опираясь на необходимые аспекты.
Суть проблемы
Ваше практически ориентированное решение, при котором информация о branch (подразделении) хранится в sessionStorage
, выглядит разумным для встраивания в ваш внутренний проект, работающий через VPN. Этот подход позволяет загружать специфические данные, соответствующие выбранному пользователю подразделению. Например, если пользователь находится в Нью-Йорке, приложение будет загружать только данные для этого региона. Более того, возможность временного изменения подразделения прямо в приложении делает использование sessionStorage
еще более подходящим.
Безопасность
Как вы и отметили, в sessionStorage
не хранится чувствительная информация, такая как имя пользователя или пароль. Это важный момент, так как безопасность данных должна оставаться приоритетом для любого веб-приложения. sessionStorage
следует рассматривать как незащищенное хранилище, что требует от вас валидации и обработки данных перед использованием. В вашем случае, поскольку данные не являются критически важными, можно утверждать, что уровень безопасности вполне приемлем.
Предостережения
Система должна включать проверку на сервере, чтобы удостовериться, что пользователь не получил доступ к данным, к которым у него нет прав. Эффективное серверное валидация предотвращает возможные случаи, когда данные в sessionStorage
могут быть подменены злоумышленниками, тем самым снижая риски для приложения.
Масштабируемость
Важно учитывать масштабируемость вашего решения. Если ваше приложение будет использоваться большим количеством сотрудников одновременно, стоит подумать о том, как обрабатывать большие объемы данных. Для небольшого числа одновременно работающих пользователей использование sessionStorage
вполне оправдано. Однако по мере роста компании может возникнуть необходимость в более сложных архитектурных решениях, таких как использование серверного хранилища с оптимизированными базами данных.
Заключение
Использование sessionStorage
для хранения не чувствительной информации о пользователе, такой как подразделение, является допустимым и может считаться разумным выбором в вашем конкретном случае. Ключевыми аспектами этого подхода являются:
- Необходимость сервера для проверки данных: для снижения рисков безопасности важно, чтобы изменения данных на стороне клиента проверялись на сервере.
- Скоростные преимущества: для небольших групп пользователей использование
sessionStorage
позволяет быстро и эффективно загружать данные. - Гибкость: возможность изменения данных пользователем в интерфейсе приложения может помочь в удобстве работы.
При правильной реализации и контроле рисков такой подход оказывается не только действенным, но и гибким, что делает его предпочтительным для внутреннего приложения с ограниченным доступом.