Executando verificação de segurança...
3

Por que o tabnews "armazena" as informações dessa forma?

Estava explorando o tabnews, desde interface até os cookies e não entendo o por que de ele armazenas parte de suas informações no local storage.

Armazena o username do usuário, suas "permissões" e etc.
Sei que isso não trás nenhum risco de segurança ao site, mas gostaria de entender o porque de armazenarem isso do lado do cliente.

Carregando publicação patrocinada...
4

Fala @mvrcelo, ótima pergunta!

A principal necessidade de armazenar os dados do usuário logado no localStorage surgiu para diminuir as requisições que buscam os dados desse usuário. Hoje são mais de 150k requisições por mês só nesse endpoint /api/v1/user, mas sem esse cache seriam muito mais.

Como você citou, isso não representa nenhum problema de segurança, pois essa informação só é utilizada para determinar alguns detalhes da interface visual, já que ela é diferente caso o usuário esteja logado ou não. Essas informações nunca são consideradas pelo backend, pois lá só é verificado o cookie de sessão enviado pelo cliente e as permissões atualizadas são buscadas sempre no banco de dados.

A mesma requisição é usada para obter outras informações dos usuários, como os saldos de TabCoins e TabCash mostrados no Header, então essas informações também ficam com um cache local que sempre fica sincronizado entre todas as abas que estiverem abertas no TabNews, ou seja, se você ganhar TabCash por qualificar um conteúdo, todas as abas do TabNews que estiverem abertas no mesmo dispositivo mostrarão o saldo atualizado.

O localStorage também é utilizado para salvar a preferência de tema (claro ou escuro) e algumas informações temporárias, como rascunhos de conteúdos, flag para mostrar os confetes após a criação de novo conteúdo e o endereço de email do usuário para confirmação durante o processo de cadastro.

1

Performance.

o fato de possuir informações nas permissoes nao tem risco a segurança porque essas permissoes sao checadas a cada requisição ao servidor