É seguro usar o LocalStorage?
30 de janeiro de 2020
0 minutos de leituraA internet evoluiu muito desde o primeiro site da história, que mal conseguia organizar textos básicos. O HTML5 é a versão mais recente da linguagem de marcação de hipertexto e foi desenvolvido para atender a quase tudo que um desenvolvedor web precisa, sem exigir plugins adicionais no navegador. Com o HTML5, os desenvolvedores ganharam diversos elementos semânticos e gráficos, além de alguns recursos para armazenamento na web — entre eles, o armazenamento local. É claro que muita gente se pergunta: é seguro usar o armazenamento local?
O armazenamento local chamou a atenção dos desenvolvedores como uma solução leve para guardar dados sem recorrer a bancos de dados ou até mesmo ao servidor. Parece ótimo, mas será que é sempre uma boa ideia usá-lo? Confira algumas reflexões da equipe da Snyk.
O que é LocalStorage?
O LocalStorage é um recurso de armazenamento web do HTML5 que guarda dados no cliente — ou seja, localmente, no computador do usuário. Os dados armazenados localmente não têm prazo de validade e permanecem lá até serem excluídos. (Já o armazenamento de sessão, outra API de armazenamento web do HTML5, apaga os dados quando o navegador é fechado.)
O armazenamento local é feito inteiramente em JavaScript. Embora também gere um documento em texto simples no dispositivo do usuário, ele permite armazenar até 5 MB de dados (em comparação com os 4 KB de um cookie). Isso possibilitou várias aplicações interessantes, como gerenciar conteúdo para reduzir a necessidade de solicitá-lo ao servidor e acelerar o carregamento das páginas.
Quando usado com critério, o armazenamento local pode ser uma solução leve e poderosa para guardar dados, mas não está livre de problemas. Veja alguns motivos pelos quais usá-lo pode ser uma má ideia, dependendo do que será armazenado.
Por que usar LocalStorage pode ser uma má ideia
O armazenamento local não é, por natureza, mais seguro do que os cookies. Sabendo disso, é possível usá-lo para guardar dados que não sejam relevantes do ponto de vista da segurança. Ainda assim, há alguns motivos para repensar o uso do armazenamento local.
1. Se um site estiver vulnerável a XSS, o LocalStorage não é seguro
Talvez a principal objeção ao uso do armazenamento local sejam as vulnerabilidades de segurança associadas a ele. O armazenamento local compartilha muitas características com os cookies, inclusive os mesmos riscos de segurança. Um deles é a vulnerabilidade a scripts entre sites, ou XSS, que podem roubar cookies e permitir que hackers se passem por um usuário usando a sessão de login dele em um site. Guardar algo confidencial, como uma senha, em um arquivo de armazenamento local facilita o trabalho de um hacker, que não precisa carregar o cookie no próprio navegador.
2. Os desenvolvedores não têm controle sobre os dados armazenados localmente
Com o armazenamento local, não há armazenamento no servidor — nem banco de dados sob o controle do desenvolvedor. Isso pode causar problemas por vários motivos. Um deles é que os desenvolvedores não conseguem atualizar o código ou as informações depois que são armazenados. O usuário teria que excluir o arquivo manualmente, o que exigiria encontrá-lo. Outra opção seria limpar o cache do navegador e, assim, perder todos os dados armazenados.
3. As pessoas limpam o cache
Limpar o cache do navegador periodicamente ajuda os cookies a funcionar melhor e costuma ser a primeira medida adotada para resolver problemas no navegador, como uma página que não carrega corretamente. Isso é um problema quando o armazenamento local é usado para manter as funções de um site. Se o usuário limpar o cache, essas informações serão perdidas permanentemente. Por isso, o armazenamento local é mais útil como banco de dados de reserva.
Alternativas ao LocalStorage
Há algumas alternativas ao armazenamento local, dependendo de as informações serem confidenciais ou não. Desenvolvedores que preferem não usar o armazenamento local podem:
Usar sessões no servidor para informações confidenciais:Armazenar dados no servidor oferece várias vantagens quando se trata de informações confidenciais. Primeiro, o desenvolvedor pode garantir a segurança e ter mais controle sobre cada sessão, que pode ser encerrada imediatamente, se necessário. Segundo, os dados ficam protegidos pela arquitetura, reduzindo a chance de exposição.
Para informações não confidenciais, escolha o IndexedDB: Para quem pretende usar sessões no cliente, o IndexedDB permite criar aplicações cujos dados podem ser armazenados localmente. Embora não seja compatível com tantos navegadores quanto o armazenamento local, ainda pode ser útil para guardar dados não confidenciais localmente. O IndexedDB tem uma grande vantagem sobre o armazenamento local: é um banco de dados completo, capaz de lidar com mais tipos de dados.
Armazene dados com inteligência
Quando implementado com critério, o armazenamento local pode melhorar o desempenho do site e ajudar a criar aplicações mais leves. No entanto, ele nunca deve ser usado para guardar informações confidenciais, como senhas ou dados pessoais. Isso cria um risco de segurança que pode ser facilmente evitado se o servidor do site já estiver protegido.
Para informações que exigem criptografia e segurança, existem outras soluções eficientes e práticas, como sessões no servidor. Com a cibersegurança sendo uma preocupação tão importante, não vale a pena correr esse risco. Portanto, não corra.
A Snyk ajuda você a encontrar e corrigir vulnerabilidades continuamente para manter a segurança. Crie uma conta gratuita.
Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.
