Python Protection Par Mot De Passe
Je suis un débutant donc si cette question semble stupide, s'il vous plaît garder avec moi.
Je me demande que, lorsque nous écrire du code pour le nom d'utilisateur/mot de passe de case en python, si elle n'est pas compilé en exe ie script state
, ne sont pas les gens seront facilement ouvrir le fichier et de supprimer le code de la potion qui fait le mot de passe de vérifier?
Je suis en supposant que l'ensemble du programme est entièrement écrit en python
, pas de C
ou C++
.
Même si j'utilise un programme comme py2exe
il peut facilement être décompilé retour à code source. Donc, est-ce à dire qu'il est inutile d'en faire un mot de passe vérifier?
Comment les programmeurs professionnels faire face à cela?
- Pouvez-vous donner un exemple de quand vous pouvez faire un mot de passe de protection purement à l'intérieur d'un programme en Python? Habituellement, lorsque vous entrez un mot de passe pour accéder à certaines ressources externes.
- Avec protection par mot de passe entendons-nous, d'authentification et d'autorisation, ce qui signifie que le programme peut être exécuté par un "Utilisateur" ou d'application de la licence du logiciel où vous souhaitez que l'utilisateur à acheter la licence et le programme vérifie que. Je pense que la licence de l'application, c'est comme l'a souligné dur en python spécifique en comparaison permet de dire que Java.
- Je suis un débutant donc je ne suis pas très sûr. Actuellement ce que j'ai est un programme qui prennent la saisie de l'utilisateur et stocké les données dans la base de données sqlite. Et j'ai un mot de passe simple de vérifier à l'aide de hachage lib
Vous devez vous connecter pour publier un commentaire.
Edit: Votre révisé à la question précise que vous êtes préoccupé par les gens modifiant le code de contourner un mot de passe vérifier. Oui, c'est tout à fait possible. Vous pouvez fournir votre code .pyc forme, mais qui ne sont pas nécessairement empêcher quelqu'un de la décompilation et à l'altérer. Malheureusement, Python est tout simplement pas conçu pour empêcher le code de l'altération. Le meilleur que vous pouvez faire est d'effectuer un certain type d'authentification de la transaction avec un serveur sécurisé, de sorte que peu importe la façon dont quelqu'un modifie le code, ils ne peuvent pas contourner cette étape. En fonction de votre application, qui peut être exagéré.
Le problème de la gestion de l'authentification par mot de passe est un épineux problème de sécurité qui permettent aux gens de dépenser de l'ensemble des carrières. Cependant, voici quelques informations à ce sujet, cela suppose que vous êtes en train de rouler votre propre mot de passe d'authentification à partir de zéro:
Même, de vêtements de protection par mot de passe, en règle générale, l'utilisateur mots de passe ne sont pas stockés en clair. Au lieu de cela, habituellement un fiable de hachage à sens unique fonction est utilisée pour créer une séquence de bits qui ne rappelle pas le mot de passe. Lorsqu'un mot de passe est entré, la même fonction de hachage est appliquée et le peu de modèles sont comparés. Si elles sont identiques, la probabilité est très forte que le mot de passe a été entré correctement.
Ce qui constitue un "fiable" fonction de hachage est délicate. Plusieurs sont dans l'usage commun, et certains de la commune les fonctions de hachage sont sensibles à des exploits connus.
Noelkd fournit un code qui illustre cette approche, bien que MD5, qui son code utilise, est (je crois) un qui est compromis au point qu'il y a de meilleurs choix. Cet article propose également un code pour faire quelque chose de similaire:
L'authentification des Utilisateurs et des mots de passe en Python
Si votre préoccupation est de stocker le mot de passe réel que vous devez passer à la base de données SQLite en clair, c'est un autre problème. La plupart du temps, j'ai vu les mots de passe stockés en clair dans des scripts ou d'un fichier de configuration et l'application est structurée de telle manière que compromettre ce mot de passe est une question de risque modeste.
Vous pouvez vérifier le hash de ce que l'utilisateur a entré vs le hash de votre mot de passe pour vérifier si l'utilisateur a entré le bon mot de passe, j'ai fait un exemple très simple de montrer ceci:
Dans l'exemple, le hachage de mot de passe est
"secretpassword"
qui hachages pour"2034f6e32958647fdff75d265b455ebf"
donc, comme vous pouvez le voir, même si le code source est décompilé, vous pouvez toujours voir le hachage du mot de passe plutôt que le plan de texte du mot de passe.Pour donner un peu d'une mise à jour pour 2016, actuellement si votre hachage des mots de passe en python que vous devriez être à la recherche à l'un des trois suivants libs:
passlib
Exemple levée de ici
bcrypt
django-scrypt
Si vous faites la vérification sur l'ordinateur de l'utilisateur, ils peuvent modifier le code comment ils aiment bien, assez bien, peu importe ce que vous faites. Si vous avez besoin de sécurité comme cela, alors que le code doit être exécuté quelque part inaccessible, par exemple un serveur. "Ne croyez pas que le client est un important ordinateur principe de sécurité.
Je pense que ce que vous voulez faire est de faire un script serveur qui ne peut être accessible par un mot de passe donné par le programme client. Ce serveur programme fonctionne très bien, comme l'exemple de code donné dans d'autres réponses: quand un nouveau client est créé, ils envoient un mot de passe en clair sur le serveur qui le met par le biais d'un chiffrement à sens unique, et les stocke. Alors, quand un client veut utiliser le code qui est le corps principal de votre programme, ils envoient un mot de passe. Le serveur met ce à travers le chiffrement à sens unique, et voit si il correspond à n'importe quel stockées, les mots de passe hachés. Si c'est le cas, il exécute le code dans le corps principal du programme, et envoie le résultat à l'utilisateur.
Sur un sujet connexe, les autres réponses suggèrent à l'aide de la
md5
algorithme. Cependant, ce n'est pas l'algorithme le plus sécurisé - tout assez sûr pour de nombreuses raisons, lahashlib
module de la bibliothèque standard, donne d'autres, plus sécurisé algorithmes, et il n'y a pas de raison de ne pas utiliser à la place.Sur un serveur seuls les administrateurs de serveur devrait avoir le droit de modifier le code. Par conséquent, pour modifier le code d'accès administrateur, et si vous le faites, alors vous pouvez accéder à tout de toute façon. 🙂
Il en va de même pour un programme client. Si la sécurité est le mot de passe de vérification, vous n'avez pas besoin de contourner le mot de passe de vérifier, il vous suffit de lire les fichiers de données directement.
Dans les deux cas, pour éviter que les gens qui ont accès aux fichiers à partir de la lecture de ces fichiers un mot de passe n'est pas assez. Vous avez pour chiffrer les données.
Commençons par la base, maintenant, allons-nous? Tout en faisant les identifiants cryptage de mot de passe, nous devrions toujours faire un moyen de chiffrement. Une façon de cryptage, vous ne pouvez pas déchiffrer le texte une fois qu'il est crypté. Il y a de cryptage appelé
md5
qui ne sont qu'un moyen de chiffrement.Il y a déjà une bibliothèque est disponible en Python appelé
hashlib
.De l'python docs:
Plus sur cette: http://docs.python.org/2/library/hashlib.html?highlight=hashlib#hashlib
Pour protéger les données stockées sur l'ordinateur client, vous avez à le chiffrer. Période.
Si vous faites confiance à un utilisateur autorisé, vous pouvez utiliser un mot de passe de la clé de cryptage (de nombreux autres réponses sur la Pile d'adresses Exchange), et espère qu'il est assez intelligent pour protéger son ordinateur contre les logiciels malveillants.
Si vous ne pas la confiance de l'utilisateur autorisé (un.k.un. DRM), vous sont tout simplement hors de la chance-trouvez un autre projet.;-)
J'ai passé les deux derniers jours raffinage et de l'exécuter au moyen d'un mot de craquelins et il semble tenir le coup assez fort.
Voici mon code pour que vous regardez:
Cela devrait faire le travail pour presque tout, aussi longtemps que vous l'ajuster à vos besoins!!