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

Segurança em Aplicações JavaScript M.E.A.N

Olá Pessoal tudo bem?

Pessoal hoje estou trazendo uma problemática importante na parte de segurança, estou desenvolvendo projeto usando tecnologia JavaScript M.E.A.N, gostaria de compartilhar e saber a opinião do pessoal sobre questões de segurança,

Segurança com JWT, bcrypt e simple-encrypt,

Usando o Json Web Token temos a certeza que o usuário passou pela autenticação e usando o interceptor o usuário será verificado a cada requisição ao nosso server,

Usando o bcrypt podemos criptografar a senha dos usuários evitando fraudes no lado do banco de dados,

Simple-encrypt para criptografia bidirecional de forma simplificada.

Qual problemática?

Desenvolver um sistema de log do usuário para registro e permissões das ações.

Solução Sugerida:

Marcar o usuário localStorage para saber qual tipo de usuário estamos tratando e suas permissões.

O localStorage, cookies ou sessionStorage são vulneráveis e os usuários podem manipular as informações armazenadas, então ai entra a criptografia bidimensional usando o simple-encrypt, a ideia é criptografar os dados e permissões do usuário e armazenar no localStorage, quando o usuário solicitar um recurso autenticado o interceptor verifica o token, documento de usuários do MongoDB garantindo a confiabilidade das informações de usuário e perfil (com criptografia reversa do simple-encryptor), então passamos com next() para execução da API que verifica se o perfil do usuário que está na requisição possui permissão para tal ação e executa ou retorna acesso negado.

Vocês acham essa solução segura? alguém sabe alguma forma de burlar? existem soluções melhores? muito poder computacional gasto? alguma forma de otimizar?

Mais Informações:

Json Web Token (JWT): https://www.npmjs.com/package/jsonwebtoken

Bcrypt: https://www.npmjs.com/package/bcrypt

Simple Encryptor: https://www.npmjs.com/package/simple-encryptor

Atenciosamente,

Renan Lopes

2 respostas
solução!

Olá Pessoal,

Estarei desenvolvendo a solução proposta para testes, assim que houver um resultado estarei informando, obrigado,

Atenciosamente,

Renan Lopes

Encryptar a senha no banco é importante para que o administrador do banco não conheça a senha do usuário. OK. Do resto, o JWT já resolve tudo. O usuário pode mexer no localStorage e fazer o que deseja, por exemplo, alterar as permissões. Mas se ele acessar a sua API (e vai acessar, porque em SPA não há lógica de negócio na aplicação, apenas lógica de UI, se tiver lógica de negócio há algo de errado com a app) não conseguirá realizar nada, porque o payload do JWT será consultado e nesse payload só o seu server consegue descriptografar. Você aprendeu isso no curso de MEAN, a diferença é que no lugar do usuário no payload, você coloca um objeto com o usuário e suas permissões.

No máximo, o usuário pode conseguir enxergar alguma tela que ele não deveria no browser, mas, novamente, é sua API que deve ser protegida. Isso não é novidade de SPA, isso existe desde que web é web.

Mas se quiser colocar essa camada extra ai de segurança para se sentir mais seguro, beleza. Mas tá com cheiro de overenginearing.