126 votes

J'ai besoin de stocker en toute sécurité un nom d'utilisateur et un mot de passe en Python, quelles sont mes options ?

Je suis en train d'écrire un petit script Python script qui va périodiquement extraire des informations d'un service tiers en utilisant une combinaison de nom d'utilisateur et de mot de passe. Je n'ai pas besoin de créer quelque chose qui soit 100% à l'épreuve des balles (est-ce que 100% existe ?), mais j'aimerais impliquer une bonne mesure de sécurité pour qu'au moins il faille beaucoup de temps à quelqu'un pour le casser.

Ce script n'aura pas d'interface graphique et sera exécuté périodiquement par cron Je devrai donc stocker le nom d'utilisateur et le mot de passe soit dans un fichier crypté, soit dans une base de données SQLite, ce qui serait préférable car j'utiliserai SQLite de toute façon, et je n'ai pas besoin d'un mot de passe pour le décrypter. pourrait Il est nécessaire de modifier le mot de passe à un moment ou à un autre. De plus, je vais probablement envelopper tout le programme dans un EXE, puisqu'il est exclusivement destiné à Windows à ce stade.

Comment puis-je stocker en toute sécurité la combinaison du nom d'utilisateur et du mot de passe qui sera utilisée périodiquement par le biais d'un cron emploi ?

7voto

Corey D Points 2676

Je pense que le mieux que vous puissiez faire est de protéger le fichier script et le système sur lequel il s'exécute.

Pour l'essentiel, procédez comme suit :

  • Utiliser les autorisations du système de fichiers (chmod 400)
  • Mot de passe fort pour le compte du propriétaire sur le système
  • Réduire les possibilités de compromission du système (pare-feu, désactivation des services inutiles, etc.)
  • Supprimer les privilèges administratifs/Root/sudo pour ceux qui n'en ont pas besoin

4voto

KRBA Points 729

J'ai utilisé Cryptographie parce que j'ai eu des difficultés à installer (compiler) d'autres bibliothèques couramment mentionnées sur mon système. (Win7 x64, Python 3.5)

from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
cipher_text = cipher_suite.encrypt(b"password = scarybunny")
plain_text = cipher_suite.decrypt(cipher_text)

Mon script est exécuté dans un système/une salle physiquement sécurisé(e). Je crypte les informations d'identification avec un "encrypter script" dans un fichier de configuration. Je les décrypte ensuite lorsque j'ai besoin de les utiliser. Le "Encrypter script" n'est pas sur le système réel, seul le fichier de configuration crypté l'est. Quelqu'un qui analyse le code peut facilement casser le cryptage en analysant le code, mais vous pouvez toujours le compiler dans un EXE si nécessaire.

1voto

andrew cooke Points 20902

Les systèmes d'exploitation disposent souvent d'une fonction de sécurisation des données pour l'utilisateur. dans le cas de Windows, il semble que ce soit http://msdn.microsoft.com/en-us/library/aa380261.aspx

vous pouvez appeler les apis win32 à partir de Python en utilisant http://vermeulen.ca/python-win32api.html

Si vous souhaitez modifier les données, vous pouvez le faire en écrivant du code pour extraire, modifier et enregistrer la valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X