Что такое «секретный» вариант сеанса?

111

Я ничего не знаю о криптографии. Интересно, в чем секрет сеанса.

Я вижу такой код:

app.use(express.session({
  store: mongoStore({
    url: app.set('db-uri')
  }),
  secret: 'topsecret'
}));

В чем секрет и нужно ли его менять?

Гарри
источник

Ответы:

83

Да, вы должны это изменить. Секрет сеанса в connect просто используется для вычисления хэша . Без строки доступ к сеансу был бы "запрещен". Взгляните на документы подключения , это должно немного помочь.

Hacknightly
источник
43
Вы не только можете это изменить, но и должны это изменить.
Майкл Миор
1
@MichaelMior, как часто?
FRD
9
@FRD Я хотел сказать, что вы не должны оставлять по умолчанию что-то вроде topsecret. Секрет должен быть случайной строкой символов. В идеале вы также должны периодически менять его, если он был обнаружен. Однако для этого требуется поддержка ротации секретов, чтобы сразу не аннулировать существующие сеансы. То есть два секрета сеанса должны считаться действительными одновременно. Насколько мне известно, в настоящее время Express не поддерживает смену секретов.
Майкл Миор 02
7
Экспресс-сессия @MichaelMior с 1.11.0 поддерживает ротацию секретов. Из документации: «Если предоставляется массив секретов, только первый элемент будет использоваться для подписи cookie идентификатора сеанса, в то время как все элементы будут учитываться при проверке подписи в запросах». (Подробности см. В expressjs / session # 127. )
Wolfgang
Это то же самое, что и подписанный файл cookie, если да .. вам нужно это сделать:res.cookie('name', 'value', {signed: true})
Мухаммад Умер
22

Секрет используется для хеширования сеанса с HMAC:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L256

Затем сеанс защищен от перехвата сеанса путем проверки отпечатка пальца на хэш с секретом:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L281-L287

подстаканник
источник
3
Но как же хэш защищает от перехвата сеанса? Если у злоумышленника есть файл cookie сеанса, то разве у него нет и хеша? Если у злоумышленника нет файла cookie, то каким образом секретный хеш затрудняет угадывание (по сравнению с просто более длинным случайным идентификатором сеанса)?
Стюарт П. Бентли
8
секрет - это соль для хэша, это просто усложняет кому-то: 1. расшифровать фишинговый cookie, 2. подделать сеанс, выдав себя за пользователя, поскольку у них нет секрета (соли), который они не могут создать правильный идентификатор сеанса.
mattdlockyer
7
Обе эти ссылки недействительны из-за того, что это ответ трехлетней давности.
trysis
5
@mattdlockyer Это не защищает вас от перехвата сеанса. И зачем злоумышленнику пытаться расшифровать cookie? Если у злоумышленника есть cookie, значит, он / она уже имеет полный доступ до завершения сеанса. Я имею в виду, что люди не хранят пароль своего пользователя в куки, это было бы смешно. И таких вещей, как jwt, почти всегда следует избегать.
Форивин
Кажется, есть смешанные ответы относительно цели секрета сеанса. Некоторые говорят, что это защищает от перехвата сеанса, в то время как другие не согласны. Может кто-нибудь объяснить, какова реальная цель создания этого хеша? Точно, для чего он вычисляет хеш?
nawK
-9

секретный ключ в основном используется для шифрования данных в сеансе

Рахул Шайни
источник
8
Нет, это не так. См. Принятый ответ 6 лет назад.
Квентин