Можно ли хранить идентификатор сеанса в localStorage?

Безопасно ли хранить идентификатор сеанса пользователя в localStorage? На сайте w3.org они говорят

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

Значит ли это, что localStorage может использоваться для конфиденциальных данных?

Ответ 1

Это зависит от того, что вы подразумеваете под "безопасно"?

localStorage примерно такой же безопасный, как cookie с ограниченным доступом. С веб-страниц к нему можно обращаться только по страницам из одного домена. Zillions of sites хранят идентификаторы сеанса в файлах cookie, которые имеют примерно одинаковые ограничения безопасности, такие как localStorage.

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

Ответ 2

httpOnly cookie обеспечивают уровень защиты XSS, который localStorage не предоставляет:

  • httpOnly cookie недоступен из [потенциально злонамеренного] JS.
  • localStorage доступен из JS.

Идентификаторы сеансов должны храниться в httpOnly secure куках.