Подтвердить что ты не робот

Сохранение учетных данных в локальном хранилище

Могу ли я безопасно использовать локальное хранилище вместо файлов cookie для хранения учетных данных сеанса?

Мне нужно сохранить зашифрованный хеш?

EDIT: будет ли это достаточно безопасным?

  • Пользователь входит в систему.

  • Сервер возвращает сообщение об успешном завершении, в том числе соленое хэширование bcrypt, имя пользователя, пароль, временную метку и, возможно, IP-адрес. Это сохраняется в локальном хранилище.

  • В будущем, когда этот хэш отправляется, сервер принимает на себя ответственность, пока IP-адрес не изменился, и срок не истек.

4b9b3361

Ответ 1

localstorage так же уязвим для чтения JavaScript как файлы cookie.

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

То же самое и для файлов cookie, но обычно cookie устанавливается на HTTPOnly, поэтому JavaScript не может его прочитать.

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

Вы должны зашифровать аутентифицированный идентификатор (например, их идентификатор пользователя) вместе с датой истечения срока действия сеанса, а затем сохранить это значение в куки или локальном хранилище. Этот токен затем проверяется на каждом вызове сервера.

Ответ 2

Если вы собираетесь использовать локальное хранилище, зачем хранить учетные данные пользователя или что-либо из них вообще?

То, что я искал, это:

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

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

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

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

Ответ 3

Сервер должен сгенерировать некоторый токен - уникальный (для сервера) фрагмент данных, который не может использоваться для обнаружения имени пользователя/пароля. Только этот токен может храниться на пользовательской машине в любой форме. Ни localStorage, ни cookie не защищены. Таким же образом применяются к ним те же правила.

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

Ответ 4

Если вы собираетесь использовать localStorage вместо файлов cookie, вы можете сделать вещи более безопасными, чем файлы cookie. Это потому, что вам не нужно отправлять идентификатор сеанса на сервер с каждым запросом, делая его маркером-носителем. Вместо этого вы можете хранить секрет пользователя на стороне клиента в localStorage и использовать его для подписи ваших запросов в дополнение к соответствующему открытому ключу, который отправляется и используется как идентификатор сеанса. Таким образом, никто на стороне сервера или прокси не может подделывать ваши запросы.