Qual é a opção “secreta” da sessão?

111

Não sei nada sobre criptografia. Estou me perguntando qual é o segredo da sessão.

Eu vejo um código como este:

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

Qual é o segredo e devo alterá-lo?

atormentar
fonte

Respostas:

83

Sim, você deve alterá-lo. Um segredo de sessão em conectar é simplesmente usado para calcular o hash . Sem a string, o acesso à sessão seria essencialmente "negado". Dê uma olhada na documentação do Connect , que deve ajudar um pouco.

Hacknightly
fonte
43
Você não apenas pode mudá-lo, mas deve mudá-lo.
Michael Mior
1
@MichaelMior, com que frequência?
FRD
9
@FRD Meu ponto é que você não deve manter o padrão de algo assim topsecret. O segredo deve ser uma sequência aleatória de caracteres. O ideal é que você também o altere periodicamente, caso seja descoberto. No entanto, isso requer suporte para rotação de segredo para que você não invalide imediatamente as sessões existentes. Ou seja, dois segredos de sessão devem ser considerados válidos simultaneamente. Que eu saiba, o Express não oferece suporte para segredos rotativos no momento.
Michael Mior
7
@MichaelMior express-session desde 1.11.0 suporta rotação secreta. Dos documentos: "Se uma matriz de segredos for fornecida, apenas o primeiro elemento será usado para assinar o cookie de ID de sessão, enquanto todos os elementos serão considerados ao verificar a assinatura nas solicitações." (Consulte expressjs / sessão # 127 para obter detalhes.)
Wolfgang
É a mesma coisa que um cookie assinado, se sim ... você precisa fazer isso:res.cookie('name', 'value', {signed: true})
Muhammad Umer
22

O segredo é usado para hash da sessão com HMAC:

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

A sessão é então protegida contra sequestro de sessão, verificando a impressão digital em relação ao hash com o segredo:

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

sub-pilha
fonte
3
Porém, como o hash protege contra o sequestro de sessão? Se o invasor tiver o cookie de sessão, ele também não terá o hash? Se o invasor não tiver o cookie, como o hash secreto torna mais difícil adivinhar (em vez de apenas ter um ID de sessão aleatório mais longo)?
Stuart P. Bentley
8
o segredo é um sal para o hash, isso só torna mais difícil para alguém: 1. descriptografar um cookie com phishing, 2. falsificar uma sessão se passando por um usuário, já que ele não tem o segredo (sal), não pode produza um id de sessão adequado.
mattdlockyer
7
Ambos os links são inválidos por se tratar de uma resposta de 3 anos atrás.
trysis
5
@mattdlockyer Isso não o protege contra sequestro de sessão. E por que um invasor tentaria descriptografar um cookie? Se o invasor tiver o cookie, ele já terá acesso total até que a sessão termine. Quer dizer, não é como se as pessoas armazenassem a senha de seus usuários no cookie, isso seria ridículo. E coisas como jwt quase sempre devem ser evitadas.
Forivin
Parece haver respostas mistas quanto ao propósito do segredo de uma sessão. Alguns dizem que protege contra o sequestro de sessão, enquanto outros discordam. Alguém pode explicar qual é o real propósito de gerar esse hash? Precisamente, para que ele está computando um hash?
nawK
-9

chave secreta basicamente usada para criptografar dados na sessão

Rahul Saini
fonte
8
Não, não é. Veja a resposta aceita de 6 anos atrás.
Quentin