web-dev-qa-db-fra.com

Le stockage local est-il sécurisé?

La question en dit long. Je veux fournir un service mais je ne veux pas stocker moi-même les données dans une base de données. Avec toutes les nouvelles récentes de piratage, etc., il me semble qu'il est plus agréable que les clients aient un contrôle total sur leurs données.

Le problème est que les données stockées sont potentiellement sensibles. Ce que j'allais faire était ... lorsqu'un client visite le site Web, il y avait une question demandant "êtes-vous sur un ordinateur personnel ou un ordinateur public". S'ils se trouvent sur un ordinateur public, le site en refuserait l'accès.

S'ils étaient sur un ordinateur personnel, il leur serait alors demandé de définir un mot de passe. Toutes leurs données seraient alors cryptées avec ce mot de passe. Maintenant, évidemment, ce n'est pas trop sûr. La méthode de cryptage serait en JavaScript et leur mot de passe en texte clair, donc je suppose qu'il serait possible pour un utilisateur averti de localiser le mot de passe dans le localStorage et d'accéder aux données.

Je pense cependant que ce n'est pas trop un problème. Si vous utilisez un ordinateur personnel, les chances que cela se produise sont éloignées car ... quelqu'un d'autre aurait besoin d'accéder à son compte d'utilisateur spécifique sur l'ordinateur, quelqu'un d'autre aurait besoin de connaître le site ... quelqu'un d'autre aurait besoin de comprendre localStorage et comment y accéder. Les données sensibles ne sont pas susceptibles de compromettre leur identité ou bien d'autres choses. Il enregistre simplement quelque chose que la plupart des gens ne voudraient pas publier.

La question est donc vraiment: localStorage est-il suffisamment sécurisé?

Question supplémentaire .. dans quelle mesure est-il difficile d'essuyer votre stockage local? Je ne voudrais pas que les utilisateurs effacent accidentellement leurs données.

Enfin - cela vaut-il même la peine de crypter/décrypter leurs données comme si vous aviez le mot de passe, vous pouvez accéder au site.

33
JasonS

Que diriez-vous de ne pas stocker du tout le mot de passe, pas même dans le stockage local? Vous pouvez utiliser une fonction de dérivation de clé pour obtenir une clé du mot de passe. Avec un sel et un nombre raisonnable d'itérations, cela devrait être décemment sécurisé.

10
CodesInChaos

L'utilisation de JavaScript avec le stockage local est au maximum aussi sécurisée que (votre serveur plus la connexion entre le navigateur et le serveur).

Si quelqu'un parvient à modifier votre serveur et à servir différents fichiers JS ou à modifier (pendant la transmission) les fichiers JS envoyés du serveur au client, il peut tout faire avec les données qu'il souhaite.

De plus: les données se trouvant sur le client, vous ne pouvez rien faire pour protéger les données. Sur un serveur ordinaire, vous pourriez par exemple restreindre la fréquence d'accès (exemple pour un mot de passe sécurisé à distance: 1 seul mot de passe lu en 10 minutes). Tout cela est inutile si les données sont sur le client et que tout le code travaillant avec les données peut être manipulé par un attaquant.

Après tout, même avec localstorage, vous devez sécuriser votre application Web! Pourquoi faire des choses sur le serveur sécurisé (espérons-le) alors? Sinon, pourquoi ne pas utiliser non plus un programme local installé sur le client?

2
Daniel Böhmer

Que diriez-vous d'obtenir une clé du serveur qui est utilisée pour déchiffrer les données localStorage?

Cela pourrait fonctionner comme ceci:

  • Lorsqu'une session est établie, le serveur renvoie une clé.
  • Cette clé est utilisée pour crypter/décrypter les données dans localStorage.
  • Lorsque l'utilisateur quitte la page, la clé est perdue, empêchant les autres de lire ce qui se trouve dans localStorage.

Cela ne doit autoriser l'accès que lorsqu'un utilisateur a une session établie.

2
Justin Meyer

Deux problèmes:

  1. si vous stockez des mots de passe en texte brut et que vous comptez sur le fait qu'il est peu probable qu'ils soient trouvés, ce n'est que de la sécurité grâce à l'obscurité. Il suffit de stocker les données en texte clair et de s'appuyer sur la même hypothèse (toujours pas sûre, mais pas de faux sentiment de sécurité)

  2. sur la plupart des navigateurs, si les gens essuient leur cache, ils suppriment également leur contenu localStorage. Les gens ne s'attendent pas à perdre des données importantes lorsqu'ils effacent leur historique et leur cache.

Je pense que vous exagérez à quoi sert localStorage. Si vous souhaitez utiliser une base de données locale qui fonctionne bien avec les applications Web, vous pouvez consulter CouchDB 's couchapps .

Mais ne stockez pas le mot de passe.

1
Giacomo

il n'est généralement pas difficile d'effacer le stockage local, mais cela dépend du navigateur. Vous devez cependant accéder aux outils de développement des navigateurs (firebug, trucs webkit, etc.).

pensez-y comme vous pensez aux cookies. Vous ne devez jamais conserver de données sensibles dans le stockage local. mots de passe, numéros de carte de crédit, peu importe.

vous pouvez toujours implémenter une fonctionnalité pour effacer le stockage local après x quantité d'inactivité, mais cela ne résoudra pas un problème de sécurité. C'est comme si une session expirait automatiquement. Le même problème s'applique, si une personne quitte un ordinateur et que quelqu'un d'autre s'assoit avant l'expiration de la session, elle peut faire des choses.

0
hvgotcodes

Vous pouvez utiliser javascrypt . Demander à l'utilisateur un mot de passe qui deviendrait la clé de cryptage/décryptage

Vous n'avez pas besoin de stocker le mot de passe, mais demandez-le chaque fois que l'utilisateur ouvre la page.
Peut être le stocker, si l'utilisateur le souhaite, et maintenant les implications.

Mais pour rejoindre le commentaire de stivlo, qu'en est-il de:

  1. accès à plusieurs appareils
  2. sauvegarde
  3. mot de passe oublié
  4. effacement trop facile du cache

Je pense que vous devriez reconsidérer le début du raisonnement. Éviter le cloud juste à cause de certains événements récents et sensationnels, est une conclusion rapide.

0
Mic