Cryptage des données côté client HTML5 - Quelles sont mes options?
Je suis en train de travailler sur un EDIT: application web mobile qui affiche certaines informations sensibles et nécessite une connexion qui stocke les membres nom d'utilisateur et mot de passe en HTML5 Session. Le nom d'utilisateur et mot de passe sont stockés dans une liste non-chiffré de l'état pour la raison que nous avons besoin d'utiliser ce nom d'utilisateur et mot de passe sur chaque chargement de la page pour accéder aux clients à distance de services web.
EDIT: Après un examen de la sécurité de notre client soulevé les suivants:
"Il est possible que le Stockage de Session de l'information peut se stocker sur le disque (par exemple sur le plantage du navigateur). Pour cette raison, aucune information sensible ne doit être stockée sous forme non chiffrée dans le stockage de session. ID d'utilisateur et de jetons de session peuvent être stockés depuis délais d'expiration de session sont mis en œuvre cependant stockage des mots de passe/Pin n'est pas recommandé."
Quel serait le meilleur/le plus sécurisé de la méthode de cryptage et de décryptage des données sensibles stockées côté client?
Merci!
source d'informationauteur TGuimond
Vous devez vous connecter pour publier un commentaire.
Voir ce Web HTML5 DB de Sécurité
...mais il y a un an, de sorte que peut-être faux déjà
Salut, au lieu de stocker le nom d'utilisateur et le mot de passe, pouvez-vous ne pas créer une sorte de "session" avec le serveur distant et, au lieu de transmettre un jeton d'authentification?
Enregistrant un nom d'utilisateur et le mot de passe de n'importe où dans le côté client me donne des frissons.
Peut-être à la recherche de façons de stocker le nom d'utilisateur /mot de passe en toute sécurité, de rechercher les moyens d'éliminer le besoin de le stocker à tous.
Cependant bien sûr, je dis ça sans connaître le contexte... je devine qu'il y a une bonne raison pour avoir besoin de stocker le nom d'utilisateur /mot de passe.
Pour toute personne tombant sur cette question, Stanford a un crypto projet à http://crypto.stanford.edu/sjcl/. Je n'ai pas utilisé moi-même dans la production, mais je suis occupé enquêter et jusqu'à présent, il semble prometteur. Espérons que cela aide quelqu'un.
David Dahl, un Firefox ingénieur, a un prototype de l'extension Firefox, domcrypt (dépôt sur github), qui fournit l'accès Javascript de Firefox NSS (Network Security Services) Api. Étant donné que Chrome utilise également NSS, fournissant la même API est probablement simple pour elle aussi.
Il poussant Mozilla d'évoluer un peu plus pour une éventuelle inclusion dans Firefox; nous allons voir ce qui se passe.
A été la recherche de ce thème me récemment. Je pense que maintenant nous avons éprouvé certaines JS bibliothèques de cryptage voir ici et ici.
Maintenant, la question est de savoir où stocker la clé. Le ranger sur le côté client serait le même que le stockage des données sans cryptage. Et d'avoir à l'utilisateur d'entrer la clé de tout le temps serait à l'encontre du but.
Peut-être que vous pourriez demander à votre serveur pour générer une nouvelle clé à chaque fois que vous créez une nouvelle session. (Assurez-vous d'utiliser le protocole HTTPS lors de la prise de cette demande). Si la session expire, l'utilisateur doit entrer le nom d'utilisateur/mot de passe à nouveau, et il serait chiffré à l'aide de la nouvelle jeton. Pour décrypter la clé que vous avez à faire un (sécurisé) de demander à votre serveur (en passant l'identifiant de session) à la demande de la clé, qui peut alors être utilisée pour décrypter nom d'utilisateur et mot de passe.
Maintenant, cela laisse encore ouvert l'habitude des vulnérabilités telles que le cross-side scripting ou de détournement de session, mais au moins le mot de passe utilisateur n'est pas stocké en clair sur le côté client.
Qu'en pensez-vous?
Je dois dire que si votre création d'une session de données 1 est-ce pas, stockées sur le serveur pas côté client, donc on ne voit pas les données de la session ou du moins il devrait être fait de cette façon par asp ou php, ect afin de disposer de l'application requièrent internet et de récupérer les informations d'un serveur web et ne pas les stocker sur le côté client. 2 si cela ne traitent côté client comme traiter avec la diffusion d'une vidéo ou des images, ou vous devez créer des fichiers sur le côté client de stocker les clés sur les clients mobiles de l'appareil est le seul moyen. Ainsi, soit la clé avec une courte durée de vie pour décrypter les données, la clé donnée par une certaine forme d'authentification ou d'un certificat ou d'une clé installé à partir de votre bureau principal et de crypter l'appareil en cas de perte. Je ne trouve pas et la fonction encrypt je voudrais proposer encore pour vous.
Je travail sur un application qui fait face au même problème.
La sécurité est importante pour cette application, car elle permet aux utilisateurs de construire des personnels des arbres (ou des listes imbriquées) et de les stocker sur le cloud.
Ma solution est de crypter le mot de passe stocké sur le côté client avec un autre mot de passe généré par le serveur pour chaque utilisateur.
Stockage sensibles de l'utilisateur les informations d'identification sont vraiment pas une bonne conception. Au lieu de générer un authentifié jeton à partir du serveur à l'aide de, disons, sprint cadre. Vous pouvez ensuite stocker le même dans localstorage en utilisant le Web DB module de Sécurité.
Plus récentes versions de navigateur devrait soutenir les Web API de Chiffrement.
1. Voir le live de la page de test si vous navigateur fonctionne
2. Le w3c Webcrypto description de l'API
3. Mozilla Developer Network Info sur WebCrypto API