Jaka jest „tajna” opcja sesji?

111

Nie wiem nic o kryptografii. Zastanawiam się, jaki jest sekret sesji.

Widzę taki kod:

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

Jaki jest sekret i czy powinienem to zmienić?

Złupić
źródło

Odpowiedzi:

83

Tak, powinieneś to zmienić. Sekret sesji w connect jest po prostu używany do obliczania skrótu . Bez łańcucha dostęp do sesji zostałby w zasadzie „odmówiony”. Spójrz na dokumentację connect , która powinna trochę pomóc.

Hacknightly
źródło
43
Nie tylko możesz to zmienić, ale powinieneś to zmienić.
Michael Mior,
1
@MichaelMior, jak często?
FRD
9
@FRD Chodziło mi o to, że nie powinieneś zachowywać domyślnego czegoś takiego topsecret. Sekret powinien być losowym ciągiem znaków. Idealnie byłoby również zmieniać go okresowo w przypadku wykrycia. Wymaga to jednak obsługi tajnej rotacji, więc nie możesz natychmiast unieważniać istniejących sesji. Oznacza to, że dwa sekrety sesji należy uważać za ważne jednocześnie. O ile mi wiadomo, Express nie obsługuje obecnie rotacji sekretów.
Michael Mior
7
@MichaelMior Express-session od wersji 1.11.0 obsługuje tajną rotację. Z dokumentacji: „Jeśli podano tablicę sekretów, tylko pierwszy element zostanie użyty do podpisania pliku cookie z identyfikatorem sesji, podczas gdy wszystkie elementy zostaną uwzględnione podczas weryfikacji podpisu w żądaniach”. (Szczegóły w expressjs / session # 127 ).
Wolfgang
Czy to to samo, co podpisane ciasteczko, jeśli tak ... czy musisz to zrobić:res.cookie('name', 'value', {signed: true})
Muhammad Umer,
22

Sekret służy do haszowania sesji z HMAC:

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

Sesja jest następnie chroniona przed przejęciem sesji poprzez sprawdzenie odcisku palca pod hashem z sekretem:

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

substack
źródło
3
Jak jednak hash chroni przed przejmowaniem sesji? Jeśli atakujący ma plik cookie sesji, czy nie ma on również skrótu? Jeśli atakujący nie ma pliku cookie, w jaki sposób tajny hash utrudnia odgadnięcie (w przeciwieństwie do posiadania dłuższego losowego identyfikatora sesji)?
Stuart P. Bentley
8
sekret jest solą do hasha, to tylko utrudnia komuś: 1. odszyfrowanie phishingowego pliku cookie, 2. sfałszowanie sesji poprzez podszywanie się pod użytkownika, ponieważ nie ma on sekretu (soli), którego nie może podaje poprawny identyfikator sesji.
mattdlockyer
7
Oba te linki są nieważne, ponieważ jest to odpowiedź od 3 lat.
trysis
5
@mattdlockyer To nie chroni przed przechwytywaniem sesji. A dlaczego osoba atakująca miałaby próbować odszyfrować plik cookie? Jeśli atakujący ma plik cookie, to ma już pełny dostęp do zakończenia sesji. Mam na myśli to, że to nie jest tak, że ludzie przechowują hasło użytkownika w pliku cookie, to byłoby śmieszne. I prawie zawsze należy unikać takich rzeczy jak jwt.
Forivin
Wydaje się, że odpowiedzi dotyczące celu sekretów sesji są mieszane. Niektórzy twierdzą, że chroni przed przejmowaniem sesji, podczas gdy inni się z tym nie zgadzają. Czy ktoś może wyjaśnić, jaki jest prawdziwy cel generowania tego skrótu? Dokładnie, do czego służy obliczanie skrótu?
nawK
-9

tajny klucz zasadniczo używany do szyfrowania danych w sesji

Rahul Saini
źródło
8
Nie, nie jest. Zobacz zaakceptowaną odpowiedź sprzed 6 lat.
Quentin