Bonjour a tous ! J'aimerais creer une application qui pourra etre securisee par un
mot de passe mais le probleme c'est que je ne sais pas ou le stocker.
Pouvez-vous m'aider ! ;)
Version imprimable
Bonjour a tous ! J'aimerais creer une application qui pourra etre securisee par un
mot de passe mais le probleme c'est que je ne sais pas ou le stocker.
Pouvez-vous m'aider ! ;)
Bonjour,
Si tu ajoute une classe de cryptage / déryptage à ton appli tu peux stocker ton mot de passe en "chiffré" dans app.config ou autre.
Perso c'est ce que j'utilise pour certains prog manipulant des data sensible, le prog à un module de décryptage. Bon de toute façon la sécurité du pass chiffré n'est pas inviolable, mais le blue ray non plus :mouarf:
le framework inclut du cryptage ?
parce que je me demandais sachant que le .net est décompilable à l'identique quoi faire des mots de passes style celui de la connexion à la base de données ...
Si tu stockes un HashMD5 dans ton code, il est visible en décompilant mais ça ne change rien au fait qu'il faut trouver une chaine qui génère le même Hash pour se connecter.
De toute façon, à moins de déployer ton appli compilée en natif, tu t'exposes toujours à la décompilation.
Au final, il n'y a pas de sécurité parfaite, mais on peut identifier plusieurs niveaux :
- if (motdepasse_saisi == motdepasse_stocké) -> Contourné directement par décompilation : le mot de passe est en clair.
- if (hash(motdepasse_stocké) == hash(motdepasse_saisi)) -> on sait quel hash il faut générer, reste à faire tourner la machine assez longtemps pour tomber sur une bonne chaine d'entrée) + en décompilant, on peut purement et simplement supprimer le check et recompiler.
- if (serviceweb(hash(motdepasse_stocké)) == true) -> tu masques le hash recherché mais, tu es toujours vulnérable au décompilation/suppression/compilation.
- Compilation en natif avant déployement, on est toujours exposé à un attaquant qui sait lire et altérer le code machine, mais ça met la chose hors de portée de l'utilisateur ou du hacker lambda (adolescement de 13 ans qui va sur astalavista). :yaisse2:
malheureusement du .net (hors C++) compilé en natif n'est pas pret d'exister
ça existe depuis longtemps :)Citation:
Envoyé par sperot51
see ngen.exe
j'aurais pas cru ...
je vais me renseigner la dessus
En utilisant ngen.exe, tu génères une image native de ton assembly que tu stockes dans une partie spécifique du GAC, ça permet de se débarrasser de l'étape de jitting, et accélère le démarrage de l'appli.
L'inconvénient est que celà se génère à partir de l'assembly, mais tu dois pouvoir la supprimer de la machine cliente après installation de l'image native.
Pour info, ngen est fourni avec le framework 2.0. Il existe aussi des soft commerciaux : Remotesoft .NET Protector par exemple.
c'est certes plus contraignant de venir compiler chez le client mais si c'est plus rapide et plus sûr ca en vaut ptete le coup ...
[UPDATE]Ngen contient encore les metadata, ça ne génère pas une image native complète, donc à priori, c'est encore décompilable, et plus, il y a encore besoin de l'assembly d'origine pour fonctionner (d'après ce que j'ai pu lire sur le sujet). Pour ce qui est de 'compiler chez le client', tu peux intégrer cette étape dans ton installeur (installshield par exemple, ou nsis), SharpDevelop le fait déjà pour optimiser son temps de chargement.
Il reste donc les soft commerciaux.
Une autre solution courante est de mettre le code sensible ou sous propriété intellectuelle dans une dll non managée (écrite en C++ non managé par exemple) et de faire du p/invoke.
quand on est allergique aux langages type c++ c'est moins évident ^^
Pourquoi, au lieu de te compliquer la vie, tu le mets pas dans le code de ton appli directement? Tu prends un textbox ou l'utilisateur proposera la reponse du mot de passe, et un bouton a coté, il ecrit le mot qu'il pense, et il clique, si c'est bon, alors il peut utiliser l'appli.
Oui mais mon logiciel peut etre protege par un mot de passe. Cela sinifie que l'utilisateur peut taper le mot de pase qu'il souhaite afin que d'autres utilisateurs ne puissent y acceder !
Si tu utilises une base de données, tu peux stocker le hash du mot de passe dans la base. Sinon tu peux stocker ce hash dans la base de registre le cas échéant.
Cela dit, ce genre de technique est facile à contourner... suppression de la clé, suppression de la valeur dans la base...
Merci beaucoup pour vos reponses ! ;) Je crois que je vais utiliser une base donnees qui me semble la meilleure solution !