Как password.js deserializeUser расшифровывает хешированные данные сеанса?

После того, как пользователь войдет в систему, отправив POST, чтобы сказать / войти в систему, паспорт прикрепит файл cookie сеанса, чтобы установить постоянный сеанс. Это делается с помощью функции serializeUser. Затем экспресс-сессия будет использовать эту функцию для генерации хэша (вычисленного с использованием HMAC) и отправляет его.

При следующем запросе паспорту каким-то образом удается расшифровать хешированную строку с помощью функции deserializeUser и извлечь из нее данные пользователя. Как это возможно, если экспресс-сессия действительно хеширует строку? Разве хеш-функции не являются односторонними? И если экспресс-сессия не хеширует строку, разве это не уязвимость системы безопасности?


person Deniz Basgoren    schedule 26.06.2019    source источник


Ответы (1)


Приложение должно предоставить serializeUser и deserializeUser.

Приложение должно иметь возможность безопасно выполнять deserializeUser, потому что они могут проверять каждый полученный хэш (установленный и считанный промежуточным программным обеспечением паспорта через request.session; я думаю, что ответственные части интереса могут быть следующими: https://github.com/expressjs/session/blob/master/index.js#L160 и https://github.com/jaredhanson/passport/blob/master/lib/sessionmanager.js#L18-L25 (или в недавно поддерживаемой вилке https://github.com/passport-next/passport/blob/master/lib/sessionmanager.js#L21-L28)) на карте они сохранили свою собственную локальную базу данных / файл / службу, предварительно связав и сохранив такие хэши сеанса пользователя вместе с именем пользователя (и / или другая конкретная информация о сеансе).

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

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

person Brett Zamir    schedule 27.06.2019