Quel est le niveau de sécurité du stockage local?


33

La question dit tout vraiment. Je souhaite fournir un service, mais je ne souhaite pas stocker les données moi-même dans une base de données. Avec toutes les nouvelles récentes concernant le 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, c'était ... lorsqu'un client visitait le site Web, une question lui était posée: "Êtes-vous sur un ordinateur personnel ou sur un ordinateur public". S'ils sont sur un ordinateur public, le site refuserait l'accès.

S'ils étaient sur un ordinateur personnel, ils seraient alors invités à 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écurisé. La méthode de chiffrement serait en JavaScript et le mot de passe en texte brut. Je suppose donc qu’un utilisateur averti pourrait localiser le mot de passe dans le stockage local et 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 faibles, 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 compromettent en rien leur identité. Il enregistre simplement quelque chose que la plupart des gens n'aimeraient pas publier.

La question est donc de savoir si le stockage local est suffisamment sécurisé.

Question supplémentaire .. combien il est difficile d’effacer votre stockage local? Je ne voudrais pas que les utilisateurs effacent leurs données par accident.

Enfin, vaut-il la peine de chiffrer / déchiffrer leurs données comme si vous aviez le mot de passe pour accéder au site ..


2
JavaScript côté client n'est pas le meilleur endroit pour faire de la cryptographie. Tout utilisateur averti peut consulter le code et pirater votre algorithme de cryptage en veillant à ce qu'il ne fasse rien et qu'il n'accepte que le mot de passe crypté.

Réponses:


10

Pourquoi ne pas simplement stocker le mot de passe, même pas dans un 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é.


Il serait plus sûr de droit si le mot de passe était soumis à PHP qui générait alors la clé en coulisse?
Jason

Non, le mot de passe est d'abord donné sur le client. En l'envoyant sur le serveur, vous augmentez le risque de vol. La dérivation de clé dans JS conserve le secret sur le client. Dans tous les cas, vous devez oublier le PW peu de temps après. Mais je pense que c'est toujours inutile - voir ma réponse.

Beaucoup de hackers sont assez intelligents ... Utilisez Lib bCrypt.
Eddie B

2

L'utilisation de JavaScript avec un stockage local est aussi sécurisée que votre serveur ainsi que la connexion entre le navigateur et le serveur.

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

De plus: comme les données sont sur le client, vous ne pouvez rien faire pour les protéger. Par exemple, sur un serveur ordinaire, vous pouvez par exemple limiter la fréquence d'accès (par exemple, un mot de passe distant sécurisé: un seul mot de passe lu dans les 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 le stockage local, vous devez sécuriser votre application Web! Pourquoi faire des choses sur le serveur (espérons-le) sécurisé alors? Sinon, pourquoi ne pas utiliser un programme local installé sur le client non plus?


Ne pensez-vous pas que le principal problème de sécurité réside dans le fait que le périphérique est utilisé ou volé par quelqu'un d'autre?

2

Pourquoi ne pas obtenir une clé du serveur utilisée pour décrypter 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 chiffrer / déchiffrer les données dans localStorage.
  • Lorsque l'utilisateur quitte la page, la clé est perdue, ce qui empêche les autres utilisateurs de lire le contenu de localStorage.

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


3
Cependant, cela ne fonctionnerait pas pour accéder aux données hors ligne (ce qui semble être un cas d'utilisation principal pour localStorage). Pour utiliser cette méthode hors connexion, vous devez conserver la clé.
Timothy Lee Russell

0

généralement ce n’est pas difficile d’effacer la mémoire de stockage locale, mais cela dépend du navigateur. Vous devez cependant vous familiariser avec les outils de développement des navigateurs (firebug, webkit, etc.).

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

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


0

Deux questions:

  1. si vous stockez des mots de passe en texte brut et que vous vous fiez ensuite au fait qu'il est peu probable qu'ils soient trouvés, c'est simplement de la sécurité par 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ûr, mais pas de faux sentiment de sécurité)

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

Je pense que vous surestimez le contenu de LocalStorage. Si vous souhaitez utiliser une base de données locale qui joue bien avec webapps vous pouvez jeter un oeil à CouchDB de couchapps .

Mais ne stockez pas le mot de passe.


0

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 stocker, si l'utilisateur veut, et maintenant les implications.

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

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

Je pense que vous devriez reconsidérer le début du raisonnement. Eviter le nuage à cause d'événements récents et sensationnels est une conclusion rapide.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.