A pergunta diz tudo realmente. Quero fornecer um serviço, mas não quero armazenar nenhum dos dados em um banco de dados. Com todas as notícias recentes de hackers, etc, parece-me que é melhor que os clientes tenham controle total sobre seus dados.
O problema é que os dados armazenados são potencialmente sensíveis. O que eu ia fazer era ... quando um cliente visitar o site, haveria uma pergunta perguntando 'você está em um computador pessoal ou em um computador público'? Se eles estiverem em um computador público, o site recusará o acesso.
Se eles estivessem em um computador pessoal, ele os solicitaria para definir uma senha. Todos os seus dados seriam criptografados com essa senha. Agora, obviamente, isso não é muito seguro. O método de criptografia seria em JavaScript e sua senha em texto sem formatação, portanto, presumo que seria possível para um usuário mais experiente localizar a senha no localStorage e acessar os dados.
Eu sinto que isso não é um problema muito grande. Se você estiver usando um computador pessoal, as chances disso acontecer são remotas, pois ... alguém precisaria acessar sua conta de usuário específica no computador, alguém precisaria saber sobre o site ... alguém precisaria entender localStorage e como acessá-lo. Os dados confidenciais não são aqueles que comprometam sua identidade ou muito mais. Ele apenas registra algo que a maioria das pessoas não gostaria que fosse publicado publicamente.
Então, realmente a questão é: o localStorage é seguro o suficiente?
Pergunta adicional .. quão difícil é limpar o seu localStorage? Eu não gostaria que os usuários apagassem acidentalmente seus dados.
Finalmente - vale a pena criptografar / descriptografar os dados como se você tivesse a senha, pode acessar o site.
fonte
Respostas:
Que tal simplesmente não armazenar a senha, nem mesmo no armazenamento local? Você pode usar uma função de derivação de chave para obter uma chave da senha. Com um sal e um número razoável de iterações, isso deve ser decentemente seguro.
fonte
O uso de JavaScript com armazenamento local é no máximo tão seguro quanto (seu servidor mais a conexão entre navegador e servidor).
Se alguém conseguir modificar seu servidor e servir arquivos JS diferentes ou modificar (enquanto estiver sendo transmitido) os arquivos JS enviados do servidor para o cliente, eles poderão fazer qualquer coisa com os dados que desejarem.
Além disso: como os dados estão no cliente, você não pode fazer nada para protegê-los. Em um servidor comum, você pode, por exemplo, restringir a frequência de acesso (por exemplo, para uma senha remota segura: apenas 1 senha é lida em 10 minutos). Tudo isso é inútil se os dados estiverem no cliente e todo o código que trabalha com os dados puder ser manipulado por um invasor.
Afinal, mesmo com o armazenamento local, você precisa proteger seu aplicativo da Web! Por que fazer as coisas no servidor (espero) seguro, então? Caso contrário, por que não usar um programa local instalado no cliente?
fonte
Que tal obter uma chave do servidor usado para descriptografar os dados localStorage?
Poderia funcionar assim:
Isso deve permitir o acesso apenas enquanto um usuário tiver uma sessão estabelecida.
fonte
geralmente não é difícil limpar o armazenamento local, mas depende do navegador. Você precisa acessar as ferramentas de desenvolvedor de navegadores (firebug, webkit, etc).
pense nisso como você pensa em cookies. Você nunca deve manter dados confidenciais no armazenamento local. senhas, números de cartão de crédito, qualquer que seja.
você sempre pode implementar algum recurso para limpar o armazenamento local após x quantidade de inatividade, mas isso não resolverá um problema de segurança. É como uma sessão automática expirar. O mesmo problema se aplica: se uma pessoa sai de um computador e outra pessoa se senta antes que a sessão expire, ela pode fazer coisas.
fonte
Duas questões:
se você armazena senhas em texto sem formatação e depois confia no fato de que provavelmente não serão encontradas, é apenas segurança através da obscuridade. Apenas armazene os dados em texto não criptografado e confie na mesma suposição (ainda não segura, mas sem falsa sensação de segurança)
na maioria dos navegadores, se as pessoas limpam o cache, elas também removem o conteúdo do armazenamento local. As pessoas não esperam perder dados importantes quando limpam seu histórico e cache.
Acho que você está exagerando no significado do localStorage. Se você quiser usar um banco de dados local que joga bem com webapps você poderia dar uma olhada para CouchDB 's CouchApps .
Mas não guarde a senha.
fonte
Você poderia usar o javascrypt . Peça ao usuário uma senha que se torne a chave de criptografia / descriptografia
Você não precisa armazenar a senha, mas solicite-a sempre que o usuário abrir a página.
Pode ser armazená-lo, se o usuário quiser, e agora as implicações.
Mas então, para juntar-se ao comentário de stivlo, que tal:
Eu acho que você deveria reconsiderar o início do raciocínio. Evitar a nuvem apenas por causa de alguns eventos recentes e sensacionais, é uma conclusão rápida.
fonte