Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

middleware sessão

Qual a diferença do secret para o genid?

app.use(sessao({
    secret: 'node alura',
    genid: function(req) {
        return uuid();
    }
}));
5 respostas

Olá Felipe, tudo bem com você?

Então o secret é a string que será utilizada como um "tempero" para gerar o hashing dos dados da sessão ( que criamos anteriormente), ou seja, através de alguns métodos ele consegue criar uma combinação segura tendo como base o valor passado em secret e para conseguir "desembaralhar" ela também precisa desse dado :)

O genid é apenas um identificador único da sessão, então todo mundo que utilizar a aplicação terá um identificar único :)

Um tem mais o sentido de proteção para que uma pessoa não se passe por outra, ou que utilize algum valor aleatório para tentar acessar nossa aplicação, e o outro é apenas um id para que diferentes usuários não tenham a mesma sessaão :)

Conseguiu compreender? Abraços e Bons Estudos!

O que seria o hashing dos dados da sessão? Seria uma criptografia ? O Secret seria um identificador que o servidor utiliza pra diferenciar uma sessão de um usuário pro outro?

Ou o secret gera um identificador? To bem confuso nessa rs

Então Felipe,

Isso mesmo, uma das estratégias para criptografar dados é utilizar as chamadas funções de hashing,, então a gente acaba protegendo os dados da sessão dessa maneira :)

O Secret seria um identificador que o servidor utiliza pra diferenciar uma sessão de um usuário pro outro?

O secret é o valor que autentica todas as sessões dos usuários, então iremos receber os dados da sessão e precisamos verificar se aquela de fato é uma sessão valida que foi assinada pelo servidor, ou se alguém está tentando simular apenas um valor para ter acesso

Por isso durante a aula é dito que o secret precisa ser um valor aleatório e guardado em um arquivo de configuração, pois caso esse dado seja descoberto, é necessário atualizar para que sessões falsas (utilizando o secret descoberto) não sejam dadas como verdadeiras e alguém tenha acesso ao nosso sistema.

Agora o que é utilizado para identificar uma sessão de um usuário para o outro é o genid, por isso utilizamos o uuid dentro dele, para que seja gerado um valor aleatório diferente para cada sessão de usuário!

Compreendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

Acho que estou pegando :).

Então o secret é uma chave de acesso para a criptografar/descriptografar os dados dos usuários que estão contidas nas sessões?

Uma dúvida que me surgiu agora sobre segurança. Mesmo que o secret seja descoberto, o usuário precisaria fazer login e bater com o banco de dados ?

Ele não teria como acessar só com o secret certo?

Sobre essa frase aqui : "Por isso durante a aula é dito que o secret precisa ser um valor aleatório e guardado em um arquivo de configuração, pois caso esse dado seja descoberto, é necessário atualizar para que sessões falsas (utilizando o secret descoberto) não sejam dadas como verdadeiras e alguém tenha acesso ao nosso sistema."

Tem alguma modulo ensinando guardar esse dado em um config?

solução!

Opa Felipe, desculpa a demora

Eu não saberia detalhar especificamente o que iria acontecer caso o secret seja descoberto, o que eu imagino é que a pessoa que está atacando conseguiria por meio de algum brute force simular um token assinado pelo servidor, e como a gente viu durante o curso, quando temos o token não precisamos de fato ir até o banco de dados sempre, é feito apenas a checagem da validade do token e as permissões contidas

Tem alguma modulo ensinando guardar esse dado em um config?

Acredito que nesse curso em nenhum momento foi abordado a questão de configurações de ambiente, normalmente o mais comum é termos um arquivo como nome .envna pasta principal do nosso projeto, junto com o package.json, server.js, etc..

Ele tem sempre um formato parecido com esse:

DB_PORT: 3000
DB_USER=root
AUTH_SECRET=node

E utilizamos algum módulo como o dotenv que podemos obter também com o npm que é responsável por pegar as chaves e valores que definimos no .enve servir a nossa aplicação, então a primeira linha do nosso servidor normalmente fica:

` require('dotenv').config() `

Dessa maneira podemos ter em nosso código algo como: process.env.AUTH_SECRET ao invés do valor hard codedem nossa aplicação :)

Vou deixar um artigo que explica mais detalhadamente aqui

Abraços e Bons Estudos!