Qual a diferença do secret para o genid?
app.use(sessao({
secret: 'node alura',
genid: function(req) {
return uuid();
}
}));
Qual a diferença do secret para o genid?
app.use(sessao({
secret: 'node alura',
genid: function(req) {
return uuid();
}
}));
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?
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 .env
na 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 .env
e 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 coded
em nossa aplicação :)
Vou deixar um artigo que explica mais detalhadamente aqui
Abraços e Bons Estudos!